C 文件描述符在打开时返回 -1
C File Descriptor is returning -1 on open
这个问题非常简单,但我似乎无法使用文件描述符打开新文件进行写入。我尝试过的每个变体 returns -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
.
Upon successful completion, the [open
] function shall open the file and
return a non-negative integer representing the lowest numbered unused
file descriptor. Otherwise, -1 shall be returned and errno set to
indicate the error. No files shall be created or modified if the
function returns -1.
要检查open()
语句有什么问题,只需写:
perror("open");
在 printf()
语句之前。
OP 已找到解决方案:
The open()
command works if O_CREAT
flag is included.
fd = open ("/home/CSTCIS/sample.dat", O_WRONLY | O_CREAT, mode);
发现问题 - 这需要包含在标志中:O_CREAT
当我们使用 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()
函数时,它会以只读模式打开文件。
这个问题非常简单,但我似乎无法使用文件描述符打开新文件进行写入。我尝试过的每个变体 returns -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
.
Upon successful completion, the [
open
] function shall open the file and return a non-negative integer representing the lowest numbered unused file descriptor. Otherwise, -1 shall be returned and errno set to indicate the error. No files shall be created or modified if the function returns -1.
要检查open()
语句有什么问题,只需写:
perror("open");
在 printf()
语句之前。
OP 已找到解决方案:
The
open()
command works ifO_CREAT
flag is included.fd = open ("/home/CSTCIS/sample.dat", O_WRONLY | O_CREAT, mode);
发现问题 - 这需要包含在标志中:O_CREAT
当我们使用 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()
函数时,它会以只读模式打开文件。