fopen和open有什么关系?
What is the relation between fopen and open?
我正在为 class 开发一个项目,我们得到了一个包含以下代码的 .c 文件:
int fd = -1;
if (fd < 0)
{
fd = open ("my_dev", O_RDWR);
if (fd < 0)
{
perror ("open");
return -1;
}
...
所以我知道它试图用 read/write 权限打开文件 "my_dev",然后在成功时返回文件描述符或在失败时返回负值,但我不明白这就是为什么它一直给我 "permission denied"。我尝试使用此代码:
int des = open("my_dev", O_CREAT | O_RDWR, 0777);
...
close(des)
到 open/create 文件(这在另一个块之前调用),但这不起作用,但如果我只是使用它:
FILE* file = fopen("my_dev","w+");
fprintf(file,str);
fclose(file);
我可以写入文件,这意味着我有写权限。现在通常情况下,我只会对所有内容使用 fopen 和 fprintf,但是对于这个项目,我们不得不使用老师的 .c 文件,该文件将尝试使用
open()
这将给出一个 "permission denied" 错误,这反过来会搞砸我的代码。
我想我的问题是 fopen 和 open 如何相互关联?每个人似乎都能背诵 open 是一个系统调用,而 fopen 是一个标准的 lib 函数,但我似乎无法找到一个明确的答案,说明如何使用 fopen() 创建一个可以由 open() 打开的文件而不用"permission denied" 错误,或者我如何使用 open() 创建一个文件,然后我可以写入、关闭并再次使用 open() 打开。
简而言之,如何在 C 中创建一个我可以写入并稍后使用 open(O_RDWR) 打开的文件?
对不起,如果这有点零散,我太累了。
PS: 需要注意的是,我是在大学电脑上编译和运行,所以权限可能是"weird" 但是需要注意的是,如果我创建文件使用终端命令 "dd" open() 将起作用,此外,我显然有一些写权限,因为我确实可以使用 fopen 和 fprintf
写入文件
fopen
是标准C运行时提供的库函数,它returns一个流,你可以在上面调用流函数,比如fscanf
,fprintf
, 或 fread
, fwrite
.
open
通常是类unix系统上的系统调用,由操作系统内核提供,它returns是一个文件描述符,可以通过fd调用IO函数,如read
, write
.
一般fopen
使用open
下划线实现。
如果你想在文件描述符上使用标准流函数,你可以使用 posix api、fdopen
,它接受一个 fd,和 returns FILE*
流。
我正在为 class 开发一个项目,我们得到了一个包含以下代码的 .c 文件:
int fd = -1;
if (fd < 0)
{
fd = open ("my_dev", O_RDWR);
if (fd < 0)
{
perror ("open");
return -1;
}
...
所以我知道它试图用 read/write 权限打开文件 "my_dev",然后在成功时返回文件描述符或在失败时返回负值,但我不明白这就是为什么它一直给我 "permission denied"。我尝试使用此代码:
int des = open("my_dev", O_CREAT | O_RDWR, 0777);
...
close(des)
到 open/create 文件(这在另一个块之前调用),但这不起作用,但如果我只是使用它:
FILE* file = fopen("my_dev","w+");
fprintf(file,str);
fclose(file);
我可以写入文件,这意味着我有写权限。现在通常情况下,我只会对所有内容使用 fopen 和 fprintf,但是对于这个项目,我们不得不使用老师的 .c 文件,该文件将尝试使用
open()
这将给出一个 "permission denied" 错误,这反过来会搞砸我的代码。
我想我的问题是 fopen 和 open 如何相互关联?每个人似乎都能背诵 open 是一个系统调用,而 fopen 是一个标准的 lib 函数,但我似乎无法找到一个明确的答案,说明如何使用 fopen() 创建一个可以由 open() 打开的文件而不用"permission denied" 错误,或者我如何使用 open() 创建一个文件,然后我可以写入、关闭并再次使用 open() 打开。
简而言之,如何在 C 中创建一个我可以写入并稍后使用 open(O_RDWR) 打开的文件?
对不起,如果这有点零散,我太累了。
PS: 需要注意的是,我是在大学电脑上编译和运行,所以权限可能是"weird" 但是需要注意的是,如果我创建文件使用终端命令 "dd" open() 将起作用,此外,我显然有一些写权限,因为我确实可以使用 fopen 和 fprintf
写入文件fopen
是标准C运行时提供的库函数,它returns一个流,你可以在上面调用流函数,比如fscanf
,fprintf
, 或 fread
, fwrite
.
open
通常是类unix系统上的系统调用,由操作系统内核提供,它returns是一个文件描述符,可以通过fd调用IO函数,如read
, write
.
一般fopen
使用open
下划线实现。
如果你想在文件描述符上使用标准流函数,你可以使用 posix api、fdopen
,它接受一个 fd,和 returns FILE*
流。