令人尴尬的简单问题,但我似乎无法使用文件描述符打开一个新文件。我尝试的每个变体都会返回-1
。我错过了什么?这是使用文件描述符初始化文件的方法,对吗?我找不到另外说明的文件。
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
int fd;
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
fd = open ("/home/CSTCIS/sample.dat", O_WRONLY, mode);
printf("%d\n", fd);
}
perror()打印open: No such file or directory
。
答案 0 :(得分:4)
成功完成后,[
open
]功能将打开文件并且 返回一个非负整数,表示最低编号的未使用 文件描述符。否则,将返回 -1并将errno设置为 表明错误。如果是,则不应创建或修改任何文件 函数返回-1 。
要检查open()
语句的问题,请写下:
perror("open");
在printf()
陈述之前。
OP找到了解决方案:如果包含
open()
标志,则O_CREAT
命令有效。fd = open ("/home/CSTCIS/sample.dat", O_WRONLY | O_CREAT, mode);
答案 1 :(得分:2)
当我们使用open() function
时,我们可以打开已存在于文件结构中的文件。
如果我们要创建一个新文件,那么我们可以在open()中使用O_CREAT
标志
函数或我们可以像这样使用creat()
函数。
mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
fd = open ("/home/CSTCIS/sample.dat", O_WRONLY|O_CREAT, mode);
(或)
fd=creat("/home/CSTCIS/sample.dat",mode);
当我们使用creat()
函数时,它将以只读模式打开文件。
答案 2 :(得分:1)
发现问题 - 这需要包含在标志中:O_CREAT