LonghornPHP 2026

inotify_init

(PECL inotify >= 0.1.2)

inotify_initИнициализирует экземпляр inotify

Описание

function inotify_init(): resource |false

Инициализирует экземпляр inotify для работы с функцией inotify_add_watch() .

Список параметров

Сигнатура функции не содержит параметров.

Возвращаемые значения

Возвращает ресурс потока или false .

Примеры

Пример #1 Пример использования функции inotify

<?php
// Создаём экземпляр inotify
$fd = inotify_init();
// Отслеживаем изменение метаданных файла __FILE__ (например, метки mtime)
$watch_descriptor = inotify_add_watch($fd, __FILE__, IN_ATTRIB);
// Генерируем событие
touch(__FILE__);
// Читаем события
$events = inotify_read($fd);
print_r($events);
// Следующие методы разрешают использовать функции объекта inotify без блокировки при чтении событий функцией inotify_read():
// - Вызываем функцию stream_select() для файлового дескриптора $fd:
$read = array($fd);
$write = null;
$except = null;
stream_select($read, $write, $except, 0);
// - Вызываем функцию stream_set_blocking() для файлового дескриптора $fd
stream_set_blocking($fd, 0);
inotify_read($fd); // Не блокирует и возвращает false, если нет ожидающих событий
// - Вызываем функцию inotify_queue_len(), чтобы проверить, не пуста ли очередь событий
$queue_len = inotify_queue_len($fd); // Если значение > 0, функция inotify_read() не заблокирует выполнение
// Заканчиваем наблюдение за файлом __FILE__
inotify_rm_watch($fd, $watch_descriptor);
// Закрываем экземпляр inotify
// Это закончит наблюдения
fclose($fd);
?>

Вывод приведённого примера будет похож на:

array(
 array(
 'wd' => 1, // Соответствует дескриптору наблюдения $watch_descriptor
 'mask' => 4, // Установлен бит IN_ATTRIB
 'cookie' => 0, // Уникальный идентификатор для подключения связанных событий (например,
 // события IN_MOVE_FROM и IN_MOVE_TO)
 'name' => '', // Название файла (например, если мы отслеживали изменения
 // в каталоге)
 ),
);

Смотрите также

  • inotify_add_watch() - Добавляет элемент наблюдения для объекта inotify
  • inotify_rm_watch() - Удаляет наблюдение из экземпляра inotify
  • inotify_queue_len() - Возвращает число больше нуля, если есть ожидающие события
  • inotify_read() - Читает события из экземпляра inotify
  • fclose() - Закрывает открытый дескриптор файла

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 1 note

up
20
david dot schueler at tel-billig dot de
15 years ago
Example for tailing a file (like tail -f) using inotify.
<?php
/**
 * Tail a file (UNIX only!)
 * Watch a file for changes using inotify and return the changed data
 *
 * @param string $file - filename of the file to be watched
 * @param integer $pos - actual position in the file
 * @return string
 */
function tail($file,&$pos) {
 // get the size of the file
 if(!$pos) $pos = filesize($file);
 // Open an inotify instance
 $fd = inotify_init();
 // Watch $file for changes.
 $watch_descriptor = inotify_add_watch($fd, $file, IN_ALL_EVENTS);
 // Loop forever (breaks are below)
 while (true) {
 // Read events (inotify_read is blocking!)
 $events = inotify_read($fd);
 // Loop though the events which occured
 foreach ($events as $event=>$evdetails) {
 // React on the event type
 switch (true) {
 // File was modified
 case ($evdetails['mask'] & IN_MODIFY):
 // Stop watching $file for changes
 inotify_rm_watch($fd, $watch_descriptor);
 // Close the inotify instance
 fclose($fd);
 // open the file
 $fp = fopen($file,'r');
 if (!$fp) return false;
 // seek to the last EOF position
 fseek($fp,$pos);
 // read until EOF
 while (!feof($fp)) {
 $buf .= fread($fp,8192);
 }
 // save the new EOF to $pos
 $pos = ftell($fp); // (remember: $pos is called by reference)
 // close the file pointer
 fclose($fp);
 // return the new data and leave the function
 return $buf;
 // be a nice guy and program good code ;-)
 break;
 // File was moved or deleted
 case ($evdetails['mask'] & IN_MOVE):
 case ($evdetails['mask'] & IN_MOVE_SELF):
 case ($evdetails['mask'] & IN_DELETE):
 case ($evdetails['mask'] & IN_DELETE_SELF):
 // Stop watching $file for changes
 inotify_rm_watch($fd, $watch_descriptor);
 // Close the inotify instance
 fclose($fd);
 // Return a failure
 return false;
 break;
 }
 }
 }
}
// Use it like that:
$lastpos = 0;
while (true) {
 echo tail($file,$lastpos);
}
?>
+Добавить

AltStyle によって変換されたページ (->オリジナル) /