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

时间:2010-09-07 08:29:16

标签: c linux fuse strace

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

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

标志(0100040)应与open()的参数2中传递的标志相对应。未知标志来自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

主要是找到终端标志。任何人都可以了解如何追踪这面旗帜的起源和含义,或者在哪里找到它的定义?

2 个答案:

答案 0 :(得分:3)

/usr/include/linux/fs.h:

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

答案 1 :(得分:0)

这可能是旗帜的组合。 (或运算)。