【发布时间】: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.out。 a.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