C语言中文件操作(二)
时间:2010-09-15 来源:yangqingsx
提到文件对我们大家来说并不陌生,我们每天都在不断的接触到不同的文件。比如word文档、MP3音乐文件、JPAG图形文件等,虽然他们带有不同的后缀名,在存储数据的时候采用不同的规则,但是他们的本质是相同的,都是采用某种技术存储数据的仓库。
对文件操作看似简单,只要按照文件操作函数中参数的格式传递即可完成文件的一些操作。正是因为它的简单,所以经常被我们所忽略。这样文件操作便成了我的一个噩梦,在做车位管理的时候我采用数据库来代替文件的存储操作。但是庞大的数据库对嵌入式设备而言是非常庞大的,而且也并不是所有的文件存储都可以转换为数据库存储来解决的。
在网络编程中我采用S3C2440作为服务器,我的PC机作为客户端。从客户端发送一个字符串到服务器端,而服务器端将这个字符串写入一个文本文件中。但是就在文件操作的时候出了问题。其代码如下:
fp = fopen("data.txt","at+");
if(fp == NULL)
{
printf("open file error!\n");
exit(1);
}
fwrite(revbuf,sizeof(revbuf),1,fp);
fclose(fp);
从原理上来说上面的代码是没有问题的,但是在执行完成程序之后令我很费解!我在客户端发送的字符串为:send from client use udp!但是奇怪的是我用cat data.txt查看文件内容的时候开始出现了一个框框,然后是send from client use udp!,接着是一些问号之类的东西。在网上找了很多资料,这个问题还是没有得到解决,不过终于功夫不负有心人,我最终找到了答案。都是默认值惹得禍!
在C语言任何变量在使用之前系统都会赋一个默认值,linux下C语言也不例外,只是其默认值可能存在某些方面的差异。接着我就使用memset函数对字符数组进行进行初始化,然后再将要发送的字符串来填充字符数组,最后将其发送给服务器端。经过这样处理后在data.txt文件中得到了我所期待的值。
对文件操作看似简单,只要按照文件操作函数中参数的格式传递即可完成文件的一些操作。正是因为它的简单,所以经常被我们所忽略。这样文件操作便成了我的一个噩梦,在做车位管理的时候我采用数据库来代替文件的存储操作。但是庞大的数据库对嵌入式设备而言是非常庞大的,而且也并不是所有的文件存储都可以转换为数据库存储来解决的。
在网络编程中我采用S3C2440作为服务器,我的PC机作为客户端。从客户端发送一个字符串到服务器端,而服务器端将这个字符串写入一个文本文件中。但是就在文件操作的时候出了问题。其代码如下:
fp = fopen("data.txt","at+");
if(fp == NULL)
{
printf("open file error!\n");
exit(1);
}
fwrite(revbuf,sizeof(revbuf),1,fp);
fclose(fp);
从原理上来说上面的代码是没有问题的,但是在执行完成程序之后令我很费解!我在客户端发送的字符串为:send from client use udp!但是奇怪的是我用cat data.txt查看文件内容的时候开始出现了一个框框,然后是send from client use udp!,接着是一些问号之类的东西。在网上找了很多资料,这个问题还是没有得到解决,不过终于功夫不负有心人,我最终找到了答案。都是默认值惹得禍!
在C语言任何变量在使用之前系统都会赋一个默认值,linux下C语言也不例外,只是其默认值可能存在某些方面的差异。接着我就使用memset函数对字符数组进行进行初始化,然后再将要发送的字符串来填充字符数组,最后将其发送给服务器端。经过这样处理后在data.txt文件中得到了我所期待的值。
相关阅读 更多 +