QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1064|回复: 2

进程挂起时fwrite函数问题

[复制链接]
发表于 2005-5-4 11:09:27 | 显示全部楼层 |阅读模式
列位高手,我在进程挂起之前写文件时出了问题,代码如下

if ( creat("/uc/tempfile",MODE100)<0 )
40 {
41 printf("creat file error.\n");
(gdb)
42 exit(0);
43 }
44
45 if( (fp=fopen("/uc/tempfile","r+"))==(FILE *)0 )
46 {
47 printf("open tempfile error.\n");
48 exit(0);
49 }
50
51 if ( data_process(&a)<0 )
(gdb)
52 {
53 printf("data process error.\n");
54 exit(0);
55 }
56
57
58 if ( fwrite(&a,sizeof(a),1,fp)!=1 )
59 {
60 printf("fwrite error.\n");
61 exit(0);
(gdb)
62 }
63
64 if ( kill(pid,SIGUSR1)<0 )
65 {
66 printf("kill signal error.\n");
67 exit(0);
68 }
69
70
71 if ( signal(SIGUSR2,sig_usr2)==SIG_ERR )
(gdb)
72 {
73 printf("can't catch SIGUSR1\n");
74 exit(0);
75 }
76
77 pause();

问题出在58行,但是运行的时候又没有提示"fwrite error",变量a是一个结构体,大小是

8个字节,执行完58以后tempfile仍然是0字节,而把pause()函数去掉就能正常写了,

请问这是为什么呢?
发表于 2005-5-4 11:54:18 | 显示全部楼层
如果能给出一个完整的程序最好,方便大家测试。
回复

使用道具 举报

 楼主| 发表于 2005-5-5 09:37:07 | 显示全部楼层
这个问题一经得到解决了,这里原来有个概念我没有弄清楚,就是进程中的I/O,

I/O总是比进程速度要慢得多,所以在有I/O操作的时候,一定要等I/O结束才发消息,

于是我就把 if ( fwrite(&a,sizeof(a),1,fp)!=1 ) 换成 while ( fwrite(&a,sizeof(a),1,fp)!=1 )
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 03:55 , Processed in 0.057908 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表