Параллельная запись файла в Java в Windows

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

function my_mysqli_query($link, $query, $resultmode = MYSQLI_STORE_RESULT) {
    log_action('mysqli_query', $query);
    return mysqli_query($link, $query, $resultmode);
}
function my_mysqli_prepare($link, $query) {
    log_action('mysqli_prepare', $query);
    return mysqli_prepare($link, $query);
}
...
define("LOG_FILE", "/path/to/logfile.txt");
function log_action($action, $data) {
    $time = date('Y-m-d h:i:s');
    $user = isset(

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

if(isset(

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['update'])) { $accountNo =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]GET['ID']; $firstname =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['firstname']; $surname =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['surname']; $dob =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['dob']; $email =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['email']; $phone =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['phone']; $address =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['address']; $town =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['town']; $postcode =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['postcode']; $query = "UPDATE usertable set firstname = '".$firstname."', surname='".$surname."', dob='".$dob."', email='".$email."', phone='".$phone."', address='".$address."', town='".$town."', postcode='".$postcode."' where accountNo='".$accountNo."'"; $result = my_mysqli_query($connection,$query); if ($result) { echo "Update successful"; } }
SESSION['username']) ?

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

if(isset(

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['update'])) { $accountNo =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]GET['ID']; $firstname =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['firstname']; $surname =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['surname']; $dob =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['dob']; $email =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['email']; $phone =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['phone']; $address =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['address']; $town =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['town']; $postcode =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['postcode']; $query = "UPDATE usertable set firstname = '".$firstname."', surname='".$surname."', dob='".$dob."', email='".$email."', phone='".$phone."', address='".$address."', town='".$town."', postcode='".$postcode."' where accountNo='".$accountNo."'"; $result = my_mysqli_query($connection,$query); if ($result) { echo "Update successful"; } }
SESSION['username'] : ''; message = "$time\tuser=$user\taction=$action\tdata=$data\n"; file_put_contents(LOG_FILE, $message, FILE_APPEND); }

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

if(isset(

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['update'])) { $accountNo =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]GET['ID']; $firstname =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['firstname']; $surname =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['surname']; $dob =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['dob']; $email =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['email']; $phone =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['phone']; $address =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['address']; $town =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['town']; $postcode =

Напишите библиотеку-обертку, которая регистрирует все mysqli вызовов, которые вы хотите записать, например,

[110]

Я написал это, чтобы войти в файл. Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполните глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare и так далее. Ваш код будет выглядеть так:

[111]POST['postcode']; $query = "UPDATE usertable set firstname = '".$firstname."', surname='".$surname."', dob='".$dob."', email='".$email."', phone='".$phone."', address='".$address."', town='".$town."', postcode='".$postcode."' where accountNo='".$accountNo."'"; $result = my_mysqli_query($connection,$query); if ($result) { echo "Update successful"; } }
17
задан Andrei Vajna II 3 April 2009 в 11:25
поделиться

4 ответа

Нет надежного, межплатформенного пути, который будет пассивно уведомлен, когда файл имеет другое устройство записи — т.е. повысьте исключение, если файл уже открыт для записи. Существует несколько методов, которые помогают Вам активно проверить на это, как бы то ни было.

Если несколько процессов (который может быть соединением Java и не-Java) могли бы использовать файл, используйте a FileLock. Ключ к использованию блокировок файла успешно должен помнить, что они - только "консультация". Блокировка, как гарантируют, будет видима, если Вы проверите на нее, но она не будет мешать Вам делать вещи в файл, если Вы забудете. Все процессы, которые получают доступ к файлу, должны быть разработаны для использования протокола блокировки.

Если единственный процесс Java работает с файлом, можно использовать инструменты параллелизма, встроенные в Java, чтобы сделать это безопасно. Вам нужна карта, видимая ко всем потокам, который связывает каждое имя файла с его соответствующим экземпляром блокировки. Ответы на связанный вопрос могут быть адаптированы легко, чтобы сделать это с File объекты или канонические пути к файлам. Объект блокирования мог быть a FileOutputStream, некоторая обертка вокруг потока или a ReentrantReadWriteLock.

16
ответ дан 30 November 2019 в 13:34
поделиться

Я опасался бы позволять ОС определить состояние файла для Вас (так как это зависимо от операционной системы). Если бы у Вас есть совместно используемый ресурс, я ограничил бы доступ к нему с помощью Повторно используемой блокировки

Используя эти средства блокировки один поток может получить ресурс (файл) и записать в него. Следующий поток может проверить на эту блокировку, сохраненную другим потоком и/или блоком неограниченно долго, пока первый поток не выпускает его.

Windows (я думаю), ограничил бы два процесса, пишущие в тот же файл. Я не полагаю, что Unix сделал бы то же.

4
ответ дан 30 November 2019 в 13:34
поделиться

Если 2 потока, о которых Вы говорите, находятся в той же JVM, то у Вас могла быть логическая переменная где-нибудь, к которой получают доступ оба потока.

1
ответ дан 30 November 2019 в 13:34
поделиться

Unix позволяет параллельным устройствам записи тому же файлу.

Вы не должны пытаться записать в тот же файл несколько раз. Если Вы - Вы, имеют недостаток дизайна.

1
ответ дан 30 November 2019 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: