当前位置: 技术问答>想了解LINUX一定能明白汇编语言吗?
iis7站长之家
了解文件读写的朋友来看下--为什么会写零?(有代码)
来源: 互联网 发布时间:2016-07-19
本文导语: 本帖最后由 jerry_gao_jie 于 2009-12-02 16:15:15 编辑 //w.c //写文件代码,不断的写数据 #include int main() { FILE *fp; int i = 0; fp = fopen("./aaaaa", "w"); while(1) { fprintf(fp, "%dn", i); pr...
//w.c
//写文件代码,不断的写数据
#include
int main()
{
FILE *fp;
int i = 0;
fp = fopen("./aaaaa", "w");
while(1)
{
fprintf(fp, "%dn", i);
printf("%dn", i);
fflush(fp);
i++;
usleep(1000);
}
}
编译:gcc w.c -o w
//r.c
//读数据代码,当数据读完之后,把文件清空
#include
int main()
{
FILE *fps, *fpd;
char buf[8];
fps = fopen("./aaaaa", "r");
fpd = fopen("./baaaa", "w");
while(fgets(buf, 8, fps) != NULL)
{
fprintf(fpd, "%s", buf);
}
truncate("./aaaaa", 0);
fclose(fps);
fclose(fpd);
}
编译:gcc r.c -o r
先运行./w ,然后运行./r,r结束之后把w停掉。现在开始查看文件aaaaa和baaaa,会发现aaaaa前N个字节都是'',何解?
|
多个进程并发访问同一个资源,要加锁保护。
用信号灯吧。
用信号灯吧。
|
你这个w.c是个死循环啊
|
同时对一个文件写要加锁
truncate("./aaaaa", 0);
你已经把aaaa的大小截成0了
truncate("./aaaaa", 0);
你已经把aaaa的大小截成0了
|
不同的进程对文件进行操作 给文件加lock