Bad file descriptor

独自空忆成欢 提交于 2019-12-05 12:51:00

问题


I'm learning about file descriptors and I wrote this code:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

int fdrd, fdwr, fdwt;
char c;

main (int argc, char *argv[]) {

    if((fdwt = open("output", O_CREAT, 0777)) == -1) {
        perror("Error opening the file:");
        exit(1);
    }

    char c = 'x';

    if(write(fdwt, &c, 1) == -1) {
        perror("Error writing the file:");
    }

    close(fdwt);
    exit(0);

}

, but I'm getting: Error writing the file:: Bad file descriptor

I don't know what could be wrong, since this is a very simple example.


回答1:


Try this:

open("output", O_CREAT|O_WRONLY, 0777)



回答2:


I think O_CREAT alone is not enough. Try adding O_WRONLY as flag to the open command.




回答3:


According to the open(2) man page:

The argument flags must include one of the following access modes: O_RDONLY, O_WRONLY, or O_RDWR.

So yes, as suggested by others, please change your open to open("output", O_CREAT|O_WRONLY, 0777));. Use O_RDWR if you need to read from the file. You may also want O_TRUNC -- see the man page for details.



来源:https://stackoverflow.com/questions/6245477/bad-file-descriptor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!