write(): 文件描述符错误

3
我正在尝试学习POSIX中的基本IO函数,我编写了以下代码,但当我尝试执行代码时,它并不起作用,会返回一个“坏文件描述符”的错误:
#include <stdio.h>
#include <stdlib.h>

#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(void)
{

    int nfd;
    ssize_t ret;

    mode_t mode = S_IRWXU | S_IRWXG;

    nfd = openat(AT_FDCWD, "idx.txt", O_APPEND | O_SYNC | O_CREAT, mode);

    if (-1 == nfd)
    {
        perror("openat()");
        exit(EXIT_FAILURE);
    }

    ret = write(nfd, "HELLO", 5);

    if (-1 == ret)
    {
        perror("write()");
        exit(EXIT_FAILURE);
    }

    close(nfd);

    return 0;
}

我想以O_APPEND模式写入文件。但是:

$ touch idx.txt # it does not work even if the file does not exist already
$ ./a.out
write(): Bad file descriptor

可能是重复的问题:在以O_APPEND模式打开的文件中是否可以使用write()? - mcleod_ideafix
如果文件已经存在,则只更新文件的修改时间。如果文件不存在,则在“inode”上创建一个条目,并设置修改时间。执行命令为“touch idx.txt”。 - user3629249
1个回答

5

您没有告诉系统您要写入文件,将O_WRONLY或O_RDWR添加到标志中即可使其正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接