【发布时间】:2015-05-04 15:01:27
【问题描述】:
我正在用 C 语言实现虚拟磁盘系统,其中还包括处理文件系统。我只是想知道,为什么当我尝试打开具有group 权限或others 权限的文件时,C 中的open 函数返回-1。
假设我们的文件模式为 040(文件组所有者的读取权限位):
int main(){
int filedes;
filedes = open(filename, O_RDWR, 040);
if(filedes < 0)
return -1;
printf("Open success\n");
}
这个sn-p返回而不打印打开成功。文件模式为 0644 的这段代码工作得很好
int main(){
int filedes;
filedes = open(filename, O_RDWR, 0644);
if(filedes < 0)
return -1;
printf("Open success\n");
}
我不明白为什么会这样?
【问题讨论】:
-
mode 参数在这里不应该做任何事情,因为它只影响新创建的文件。如果未指定
O_CREAT,则忽略它。运行此代码之前,现有文件的权限是什么? -
我创建了具有相同权限 (040) 的文件,带有 O_CREAT 标志。
-
那你不能以O_RDWR打开它,因为它是只读的。正如我所说,除非您正在创建文件,否则您不需要指定模式。
-
那么我应该怎么做才能阅读它的内容呢?
标签: c