c - 写(): Bad file descriptor

标签 c posix file-descriptor

我正在尝试学习 POSIX 中的基本 IO 函数,我编写了以下代码,但它不起作用,并且在我尝试执行代码时返回“Bad file descriptor”错误:

#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_WRONLY 或 O_RDWR 使其工作。

关于c - 写(): Bad file descriptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29101996/

相关文章:

c - 多线程程序中的输出

c++ - 如何在不打开文件的情况下测试文件是否被锁定和/或只读?

c - 通过 epoll 使用多个文件描述符

c - POSIX 文件描述符和 C 文件的交互

c - 指向存储的特定内存地址的指针

将十六进制转换为 Ascii 内存访问

c - 给定一个由字母和数字组成的字符串,找出给定字符串中每个数字的出现频率

memory - 我可以将映射内存提供给 malloc 吗?

c++ - 为 posix recv 设置超时会导致丢失 udp 数据包吗?

c - 从C中的文件描述符中检索文件名