execve() 传递的未知 open() 标志

发布于 2024-09-17 11:49:51 字数 792 浏览 11 评论 0原文

执行位于我的 FUSE 文件系统上的 bash 脚本时,会使用这些标志进行 open() 调用:

debug,cpfsfuse.c(62),cpfs_fuse_open: path "/make.sh", flags 0100040

标志 (0100040) 应与传入参数 2 的标志相对应open()。未知标志源自 execve() 调用:

matt@stanley:~/cpfs/dir$ strace -f ./make.sh 
execve("./make.sh", ["./make.sh"], [/* 37 vars */]

我的代码可以识别 #define O_LARGEFILE 00100000,但另一个标志似乎仅在调用 execve() 时才会出现。

Grepping 标志没有找到它:

matt@stanley:~/cpfs$ grep -RP '\b00*40\b' /usr/include/ | less

大多数终端标志都找到了。任何人都可以阐明如何追踪该标志的起源和含义,或者在哪里可以找到其定义?

When executing a bash script located on my FUSE filesystem, an open() call is made with these flags:

debug,cpfsfuse.c(62),cpfs_fuse_open: path "/make.sh", flags 0100040

The flags (0100040) should correspond to those passed in parameter 2 of open(). The unknown flag originates from an execve() call:

matt@stanley:~/cpfs/dir$ strace -f ./make.sh 
execve("./make.sh", ["./make.sh"], [/* 37 vars */]

My code recognises #define O_LARGEFILE 00100000, but the other flag appears to arise only when execve() is called.

Grepping for the flag does not find it:

matt@stanley:~/cpfs$ grep -RP '\b00*40\b' /usr/include/ | less

Mostly terminal flags are found. Can anyone shed some light on either how to track down the origin and meaning of this flag, or where to find its definition?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挽心 2024-09-24 11:49:51

/usr/include/linux/fs.h:

/* File is opened for execution with sys_execve / sys_uselib */
#define FMODE_EXEC              ((fmode_t)32)

/usr/include/linux/fs.h:

/* File is opened for execution with sys_execve / sys_uselib */
#define FMODE_EXEC              ((fmode_t)32)
半岛未凉 2024-09-24 11:49:51

这可能是标志的组合。 (或)。

This might be a combination of flags. (ORed).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文