procfs에서 제공되는 심볼릭 링크를 사용하여 *의 기능을 호출에서 사용할 수 있습니다. 디렉토리 기술자를 열고 파일 이름의 전체 경로 대신 /proc/self/fd/<dir descriptor>/filename
를 사용 : 리눅스 4.4.x.에 인쇄 "확인"위
#define _GNU_SOURCE
#include <sys/stat.h>
#include <sys/inotify.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
int main() {
int inotify = inotify_init();
mkdir("tmp", 0777);
mknod("tmp/foo", 0777 | S_IFREG, 0);
int dirFd = open("tmp", O_DIRECTORY | O_PATH);
char buf[40] = { '\0' };
sprintf(buf, "/proc/self/fd/%d/foo", dirFd);
int watchd = inotify_add_watch(inotify, buf, IN_MOVE | IN_ATTRIB);
if (watchd < 0) {
printf("Failed: %s", strerror(errno));
} else {
printf("ok");
}
}
프로그램
(ab) procfs를 사용해 보셨나요? XXXat 시스템 콜의 기능을 에뮬레이션하려면'/ proc/self/fd/
/proc/self/fd/6/foo와 같은 경로를 inotify_add_watch에 전달할 때 ENOTDIR을 얻습니다. –
코드에 어떤 종류의 오류가 있습니다. 디렉터리 기술자를 너무 일찍 종료하거나 올바른 설명자를 사용하지 않는 경우 작동 코드에 대한 내 대답을 참조하십시오. – user1643723