【问题标题】:Net raid FS with FUSE, gcc -hello.c -o a.out, a.out is not executableNet raid FS with FUSE, gcc -hello.c -o a.out, a.out is not executable
【发布时间】:2018-07-24 21:13:20
【问题描述】:

我正在 ubuntu 上使用 FUSE 编写网络突袭 FS。下面是我实现的系统调用:create 987654322 read 987654324 release 987654326 mkdir 987654328 readdir 987654330 rmdir 987654332 @和rename

一切正常,但情况如下:我用 c 写了“hello world”并尝试输入:gcc hello.c -o a.outa.out 很好,但它只是一个文件,不能执行(当我手动设置 0777 权限时,它在 ./a.out 上执行得很好)。

什么时候必须设置权限,如何设置?而在编译的时候,如何知道哪些文件应该设置exe权限呢?基于什么?

【问题讨论】:

  • 它应该是一个文件,而不是一个目录。
  • 编译器在创建可执行文件时自动设置执行权限。它可能使用open() 的第三个参数来实现,所以我怀疑你没有正确实现。
  • @Barmar 对不起我的错误。我的意思是文件:X
  • 编译器(实际上是链接器)可能会执行open(outputfile, O_CREAT|O_WRONLY, 0555),以便文件应该获得读取和执行权限。确保您正确实施。
  • @Barmar 我打印了创建权限,它似乎是 33204 printf("permissions: %s %d\n", path, mode);;具有 204 权限的常规文件对吗?为什么会这样?

标签: c gcc permissions executable system-calls


【解决方案1】:

我缺少chmod 系统调用实现。 chmod 让它正常工作。感谢@Barmar 的帮助!

【讨论】:

    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    相关资源
    最近更新 更多