Простой вопрос:
Я должен добавить некоторый вход к своей программе.
Если два процесса используют "fwrite" на том же файле, но не тот же дескриптор файла будет записанные сообщения журнала быть атомарными или смешанными. Существует ли предел длины?
Это - определенное поведение ANSI-C или определенная реализация? Если позже, что находится на MacOSX, Linux и Windows MSVC?
empty ()
возвращает значение true для всех значений FALSE
, фактически это «not» (!
) в маскировке. Я думаю, вы имели в виду isset ()
Из руководства: Возвращает значение FALSE, если var имеет непустое и ненулевое значение.
Пустыми считаются следующие вещи:
More: http://php.net/manual/en/function.empty.php
-121--2034552-Его можно смешивать.
Если в один файл записано несколько потоков/процессов, необходимо использовать блокировку.
Альтернативой является передача сообщений регистрации в выделенную службу/поток. Отличным инструментом для внедрения является syslog , который, несомненно, установлен на всех униксах и может быть запущен в Windows .
Проведя небольшое исследование, я обнаружил следующее в этой ссылке :
Стандарт POSIX требует, чтобы операции C stdio FILE * были атомарными. POSIX -соответствующие библиотеки C (например, в Solaris и GNU / Linux) имеют внутренний мьютекс для сериализации операций с FILE * s.
Похоже, что вызовы должны быть атомарными, но это зависит от вашей платформы. В той же ссылке есть еще один абзац, который позволяет вам думать, что программист должен позаботиться:
Итак, для версии 3.0 вопрос "является ли безопасна ли многопоточность для ввода-вывода" должен быть {{1 }} ответил: "Является ли библиотека C вашей платформы потокобезопасной для ввода-вывода?" Некоторые из них по умолчанию, некоторые нет; многие предлагают несколько реализаций библиотеки C с различными компромиссами безопасности потоков и эффективности. Вы, программист, всегда обязаны заботиться о нескольких потоках.
Кроме того, поскольку у вас есть два разных ФАЙЛА *
в двух разных процессах, я думаю, у вас нет выбора.