При отслеживании нескольких файлов в C / C ++ с использованием inotify, существует ли риск возникновения состояния гонки, когда вы читаете до конца файла, а затем файл записывается перед началом опроса?
Соответствующий фрагмент кода начинается следующим образом:
while (true) {
struct pollfd pfd = { fd, POLLIN, 0 };
int ret = poll(&pfd, 1, 30000); // timeout 30s
if (ret > 0) {
size_t len = read(fd, buf, sizeof(buf));
for (size_t e = 0; e < len; ) {
inotify_event *ev = reinterpret_cast<inotify_event*>(&buf[e]);
int i = 0;
while (wds[i] != ev->wd) {
++i;
}
if (ev->mask & IN_MODIFY) {
FILE* f = ff[i];
fseek(f, pos[i], SEEK_SET);
while (fgets(line[i]+offsets[i], MAX_LINE_LENGTH, f)) {
Функция опроса возвращается только при изменении файла?Так что же произойдет, если произойдет следующая последовательность:
- опрос возвращает файл сигнализации, который был добавлен в
- Я читаю до конца файла
- , затем файл получаетдобавлен в
- , затем я начну опрашивать
Буду ли я застревать, пока файл не будет добавлен еще раз?Поскольку функция inotify_add_watch принимает только имена файлов, она не знает, где я «остановился»?