原创 linux调用open和creat创建文件的区别

2012-12-5 16:35 3239 12 12 分类: MCU/ 嵌入式

open(const char* pathname, (O_CREAT|O_WRONLY|O_TRUNC),mode_t mode);

creat(const char* pathname,mode_t mode);,

mode参数可以设置为644,755等,

调用creat创建文件时,文件为可写,但是不可读,即便mode指明文件为755.

如下程序可检验creat:

 

 8 int main(void)
  9 {
 10     char *file = "tmp_file";
 11     char *buf = "hello world";
 12     char buf_a[100];
 13     int fd, len;
 14     if((fd = creat(file, 0755)) < 0)
 15         printf("creat error\n");
 16 
 17     len = write(fd, buf, strlen(buf));
 18 
 19     printf("%d\n", len);
 20 
 21     if(read(fd, buf_a, len) < 0)
 22         printf("read error\n");
 23 
 24     close(fd);
 25 
 26     if((fd = open(file , O_RDWR)) < 0)
 27         printf("open error1\n");
 28     read(fd, buf_a, len);
 29 
 30     printf("%s %d\n", buf_a, len);
 31 
 32     close(fd);
 33     return 0;
 34 }
 
程序执行到第21行,read出现错误。即可证明creat创建文件可写,但不可读,要想读取文件,只能关闭文件,再次调用open打开文件,指定flags(O_RDONLY或者O_RDWR)。即可读,即可读取文件正确。
 
而调用open创建文件,只要参数设置正确,就可读写文件!!
 

文章评论0条评论)

登录后参与讨论
相关推荐阅读
用户416608 2013-07-05 15:36
学习tcp ip协议的总结:
假如说,本地pc,访问百度网站,经过路由转发出去。   则数据包的第一次转发时的目的mac地址为路由的mac地址,而不是百度的mac地址。   刚开始看tcp...
用户416608 2013-07-01 16:15
[博客大赛]ubuntu-10.04中安装lunch
在编译android源码时,用到lunch这个软件,可是ubuntu软件源中没有这个软件。   所以需要手动安装,步骤如下:     在ubuntu 10.04中安装lunch...
用户416608 2013-05-23 10:24
最近在看fat32文件系统做点笔记
最近在学fat32文件系统是如何组织硬盘上的数据存储的问题。   关于数据编码格式,fat32文件系统中的无论是中文字符还是英文字符都是以unicode编码的形式存在。   但如果...
用户416608 2013-01-23 09:46
【博客大赛】一个空格惹的祸
写了个读文件的应用程序,可是open一直报错,跳了快一个小时,才知道是这的原因!!   程序是这样的:   char *file = "/tmp/hello.c ": int ...
用户416608 2013-01-20 13:59
【博客大赛】SD卡协议规范学习(一)
首先,本博文遵照SD卡协议3.01版本,最旧协议版本为1.10,但是协议是向下兼容的。SD卡Physical Layer Simplified Specification Version 3.01...
用户416608 2013-01-11 22:41
【博客大赛】SD卡协议规范学习(二)
接着上篇博文,【博客大赛】SD卡协议规范学习(一)   C_SIZE占了12个bit位,所以C_SIZE最大值为210  = 2048。<?xml:namespace prefix = "o" ...
EE直播间
更多
我要评论
0
12
1
2
3
4
5
6
7
8
9
0
关闭 站长推荐上一条 /3 下一条