我正在为一门课程的项目工作,我们得到了一个包含以下代码的 .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()
这将导致"permission denied"错误,从而破坏我的代码。
我想问的是fopen和open有什么关系?每个人似乎都能背诵open是系统调用,而fopen是标准库函数,但我似乎找不到一个清晰的答案,即如何使用fopen()创建一个可以通过open()打开而不会出现"permission denied"错误的文件,或者如何使用open()创建一个文件,然后可以使用open()写入、关闭并再次打开。
简而言之,我如何在C中创建一个文件,以便稍后使用open(O_RDWR)进行写入和打开?
如果这有点混乱,对不起,我非常累。
PS:应该注意到,我正在编译和运行大学计算机上的程序,因此权限可能会很“奇怪”,但应该注意到,如果我使用终端命令“dd”创建文件,则open()将起作用,而且,我显然具有某些写入权限,因为我确实可以使用fopen和fprintf写入文件。