gpt4 book ai didi

linux - inotify_add_watch 相对于 O_PATH dirfd

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:32 24 4
gpt4 key购买 nike

我正在尝试调用 inotify_add_watch观看文件。我想指定相对于 O_PATH | 的文件O_DIRECTORY 文件描述符,la symlinkat , fstatat , 或 openat .

这可能吗?它看起来不像是。有人知道解决方法吗?

编辑

最接近的似乎是 man 2 open 中描述的“技巧”在“openat 的基本原理”下。有关示例,请参见 user1643723 的回答。

最佳答案

您可以使用 procfs 提供的符号链接(symbolic link)来实现大多数 *at 调用的功能。打开目录描述符并使用 /proc/self/fd/<dir descriptor>/filename而不是文件名的完整路径:

#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");
}
}

上面的程序在 Linux 4.4.x 上打印“ok”。

关于linux - inotify_add_watch 相对于 O_PATH dirfd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42106107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com