【问题标题】:Unknown open() flag passed by execve()execve() 传递的未知 open() 标志
【发布时间】:2010-09-07 08:29:16
【问题描述】:

执行位于我的 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 for the flag 没有找到它:

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

大多数终端标志被发现。谁能解释一下如何追踪这个标志的起源和意义,或者在哪里可以找到它的定义?

【问题讨论】:

    标签: c linux fuse strace


    【解决方案1】:

    /usr/include/linux/fs.h:

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-12-09
      • 2014-09-07
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多