红联Linux门户
Linux帮助

Unix环境写入文件时要注意小细节

发布时间:2015-02-06 15:47:49来源:linux网站作者:Harry_lyc

Unix环境写入文件时,要注意的一个小细节,要不任何情况都有可能发生。

在Unix/Linux环境下,写入文件时。如果,在open函数的读写模式,只提供了,读写、如果不存在生成,这些模式时。


如果源文件存在,以非追加的方式写入数据时,当后续的数据长度大于源文件已有的数据时,后续的文件覆盖以前的数据。

如果后续的数据长度小于源文件以后的数据长度时,只是覆盖了后续写入的数据长度。这时,文件的数据时,两者的混合,这不是我们想要的。

所以为了数据的正确性,在以非追加(append)方式吸入数据时,首先要清空,要写入的文件。


以下为一个例子:

#include<stdio.h>  
#include<stdlib.h>  
#include<fcntl.h>  
int main(int argc ,char * argv[])  
{     
int val = 0;  
int fd = 0;  
char* fpath = "./test.txt";  
char buffer[] = "Hi i am harry.";  
char buffer1 []= "liyachao.";  
/*open the file with write/read and create module*/ 
fd = open(fpath,O_RDWR|O_CREAT);  
/*truncate the exiting file's size to zero,meanning empty the exit file.*/ 
ftruncate(fd,0);  
val = write(fd,buffer,strlen(buffer));  
printf("wirte %d bytes.",val);  
return 0;  
}