inotifyを使用してC/C++で複数のファイルをテーリングする場合、ファイルの最後まで読み込むと競合状態になるポーリングを開始する前にファイルが書き込まれますか?inotify(競合状態?)を使用しているC/C++(Linux)の複数のファイルをテーリングする
コードの関連部分は次のように起動します:ファイルが変更されたときに
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関数はファイル名だけを取るので、どこに残っているのか分かりません。
ここに印象的なC-ishコードがあります。私はそれをC言語に捨ててしまいましたが、 'reinterpret_cast'はC++が必死にC言語であることを望んでいるので、それを取り除いています。 – Puppy