Chinaunix首页 | 论坛 | 博客
  • 博客访问: 55581
  • 博文数量: 22
  • 博客积分: 1546
  • 博客等级: 上尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-20 20:33
文章分类
文章存档

2010年(22)

分类: C/C++

2010-07-24 11:31:07

在《linuxC编程实战》书中,有一个my_rwl.c的小程序(详见P151):首先利用open函数或者creat函数创建一个文件,利用write函数将数据写入文件,再利用read函数读出文件中数据;用lseek移动文件指针,再写入相同的数据,最终读出所有数据。创建代码如下:

// if((fd=creat("example_63.c",S_IRWXU))==-1)
	if((fd=open("example_63.c",O_CREAT|O_TRUNC|O_RDWR,S_IRWXU))==-1)
	{
		my_err2("creat",errno,__LINE__);
	}

在调试此程序的时候,总是出现这样的情况:利用open函数创建文件的时候,一些正常。利用creat函数创建文件的时候,读出的数据总是乱码,并且提示读写失败的错误信息。在自己寻求结果无望的时候,在chinaUnix论坛得到了帮助:creat只能以只写方式打开文件。其实书上有这句话,可是在我寻求上述错误答案的时候,也没有注意到它的存在。而且我还有有这样的错误概念:即便creat函数只能以只写方式打开文件,可是我创建的时候有S_IRWXU参数,那么它便可以写了。

那么,让我重新理解它:

1.文件的打开方式是指文件以只读、只写、可读写那种方式打开,返回的文件描述符就可以对此文件进行相应的读写操作。比如上述的creat函数对example_63.c以只写方式打开,那么就只能对这个文件进行写,因此后续的读操作都失败。而open创建文件的时候,有O_RDWR参数,因此可以成功对文件读写。

2.文件的操作权限是指系统中各用户对此文件的使用权限,依参数而定。

3.以创建的角度来看,creat和open的作用相同。但以打开文件的方式来看,前者只能以只写方式,后者由于参数的关系,以可读写方式打开。

如果要解决上述的错误,那么可以在creat创建完文件后,关闭文件,再以可读写的方式,open这个文件。这么做是很麻烦,但是这里我们为了搞清楚两者的区别,也无所谓了。

阅读(892) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

wwwzyf2010-08-17 09:44:15

指正上面一个错误,你的重新理解第三条,(前者只能以只写方式)。。。可能你疏忽了吧。哈哈