【发布时间】:2016-04-25 06:39:04
【问题描述】:
我正在为一个班级做一个项目,我们得到了一个包含以下代码的 .c 文件:
int fd = -1;
if (fd < 0)
{
fd = open ("my_dev", O_RDWR);
if (fd < 0)
{
perror ("open");
return -1;
}
...
所以我知道它正在尝试打开具有读/写权限的文件“my_dev”,然后在成功时返回文件描述符或在失败时返回负值,但我不明白为什么它给了我始终如一地“拒绝许可”。我尝试使用此代码:
int des = open("my_dev", O_CREAT | O_RDWR, 0777);
...
close(des)
打开/创建文件(在另一个块之前调用),但这不起作用,但如果我只是使用它:
FILE* file = fopen("my_dev","w+");
fprintf(file,str);
fclose(file);
我可以写入文件,这意味着我有写入权限。现在通常情况下,我只会使用 fopen 和 fprintf 来处理所有事情,但是对于这个项目,我们不得不使用老师的 .c 文件,该文件将尝试使用
open()
这将给出一个“权限被拒绝”错误,这反过来又会搞砸我的代码。
我想我的问题是 fopen 和 open 如何相互关联?每个人似乎都能够背诵 open 是一个系统调用,而 fopen 是一个标准的 lib 函数,但我似乎无法找到一个明确的答案来说明如何使用 fopen() 创建一个可以由 open() 打开的文件,而无需“权限被拒绝”错误,或者我如何使用 open() 创建一个文件,然后我可以写入、关闭并再次使用 open() 打开。
简而言之,我如何在 C 中创建一个可以写入并稍后使用 open(O_RDWR) 打开的文件?
对不起,如果这有点片断,我超级累。
PS:应该注意的是我在大学计算机上编译和运行,所以权限可能“奇怪”但应该注意的是,如果我使用终端命令“dd”open() 创建文件将起作用,此外,我显然有一些写入权限,因为我确实可以使用 fopen 和 fprintf 写入文件
【问题讨论】:
-
取决于操作系统,除了两个打开的文件之外,这些函数之间可能没有任何关系。
标签: c permissions fopen file-descriptor read-write