У меня есть программа, которая опрашивает файл на предмет изменений. Однако, если я открою другую консоль Linux и удаляю файл, который опрашивает, во время опроса, программа продолжит опрос навсегда. Есть ли способ поймать это?
struct pollfd pollFileDescriptor;
pollFileDescriptor.fd = GetFileDescriptor(...returns fd
pollFileDescriptor.events = POLLPRI | POLLERR | POLLNVAL | POLLHUP;
if (poll(&pollFileDescriptor, 1, -1) > 0)
{
...
}
Я перепробовал все различные события, проверил их на предмет их отсутствия, а также просто поместил printf в оператор опроса if, просто чтобы увидеть, не попал ли он в блок кода без удачи. Кажется, висит на опросе
Удаление файла удаляет его ссылку из файловой системы. Но дескриптор файла — это еще одна ссылка. Пока есть какая-либо ссылка, файл фактически не уничтожается, поэтому никаких изменений в данных файла, которые могут быть сообщены опросу, не произошло. (Файл также может быть жестко связан, это еще одна ссылка, удаление которой не будет сообщено вам.)
Вы можете посмотреть каталог на предмет изменений. Linux предоставляет inotify и dnotify для этого.