inotify를 사용하여 C/C++에서 여러 파일을 테일링하는 경우 파일의 끝에 읽을 때 경쟁 조건이 발생할 위험이 있습니까? 그러면 폴링을 시작하기 전에 파일에 기록됩니까? inotify (경쟁 조건?)를 사용하여 C/C++ (Linux)의 "tailing"다중 파일
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