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;
- }