关于linux下creat函数的使用后read出现:Bad file descriptor
来源:互联网 发布:刘润5分钟商学院 知乎 编辑:程序博客网 时间:2024/05/16 14:13
在linux下很大一部分人创建文件的时候很少用creat了,大部分都用open来代替,其实这样是完全可以的因为creat函数就等价于下面的open函数:
open(const char * pathname, (O_CREAT|O_TRUNC|O_WRONLY));
其实要是仔细看这个open函数也就能发现,为啥用creat创建的文件,在进行读操作会出现errno:9 Bad file descriptor的错误。
一开始我就单纯的以为那个O_WRONLY可以随便的换成O_RDONLY或者O_RDWR呢,但是其实不是那样的,
creat函数的返回值就是如果成功返回一个只写的文件描述符,主意“只写”的,失败返回-1;
也就是说,对这个文件做读操作的就会出错,如下例:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
extern int errno;
void my_err(char * str_string, int line)//自己定义的出错处理函数
{
fprintf(stderr, "line:%d...errno:%d", line, errno);
perror(str_string);
exit(1);
}
int main(void)
{
int fd, ret;
char read_buf[64];
char write_buf[32] = "Hello World!";
if((fd = creat("text.c",S_IRWXU)) == -1)//创建text.c文件
{
my_err("creat", __LINE__);
}
if(write(fd, write_buf, strlen(write_buf)) < 0)
{
my_err("write", __LINE__);
}
if((ret = read(fd, read_buf,32)) < 0){
my_err("read", __LINE__);
}
for(int i = 0; i < ret; i++)
printf("%c", read_buf[i]);
printf("\n");
return 0;
}
gcc -o creat creat.c -std=c99 -Wall
./creat会出现如下错误
line:33...errno:9read: Bad file descriptor
所以大家要注意,creat函数返回的文件描述符,只可做写操作,不可做读操作,如果要进行读操作,可用open重新打开,或者创建的时候直接用open函数就可以了。
- 关于linux下creat函数的使用后read出现:Bad file descriptor
- select函数的错误,Invalid argument 或 Bad file descriptor
- java.io.IOException: read failed: EBADF (Bad file descriptor)
- Linux下出现Read-only file system的解决办法
- Linux下出现Read-only file system的解决办法
- Linux下出现Read-only file system的解决办法
- bad file descriptor
- 开发板mount宿主机出现提示:mount: nfs mount failed: Bad file descriptor的解决方案
- Linux下FILE结构与“File descriptor”的区别
- linux下的文件操作函数及creat用法
- linux下open函数和creat函数
- 关于linux 下read/write函数使用及注意事项
- LINUX下执行脚本时,出现bad interpreter:No such file or directory的原因
- Linux C read、write、creat、open等函数应用实例
- Linux&C open creat read write lseek 函数用法总结
- select error:bad file descriptor
- open 创建文件并读写的错误--bad file descriptor
- 对于报 'Bad file descriptor'错误的原因
- 关于COM类工厂80070005和8000401a错误分析及解决办法(DCOM)
- Java编程中“为了性能”需做的26件事
- poj2892
- ubuntu 10.04 下 samba 服务的配置
- 安装C静态库
- 关于linux下creat函数的使用后read出现:Bad file descriptor
- 分享一个牛人在群里的聊天记录
- 【XML入门系列】第03章_DTD和Schema技术
- Windows与Linux下SVN 使用
- Eclipse使用技巧
- 穷举法的末路——致文件加密软件作者
- UtilTool通用工具类
- [rm]realmedia文件格式解析
- 指定中文串转化为拼音<Java实现>