• 4954阅读
  • 4回复

求助!!!!!!!为什么全局FILE不能写入? [复制链接]

上一主题 下一主题
离线babyfacewa
 

只看楼主 正序阅读 楼主  发表于: 2010-01-11
程序为myapp, main.cpp中打开一个全局的FILE *fp
fp=fopen("./data.txt","a+");
在控件的TimerEvent事件中周期性地写入数据:
fprintf(fp,"%d",data);
这时如果在主窗口中点击关闭正常结束程序时,可以看到文件中写入了正确的内容,可是如果在其它终端上使用kill -9 `pidof myapp`则发现文件根本没有写入任何内容,可是如果在此控件的TimeEvent事件中使用一个新建的局部变量:
FILE *fptmp=fopen("./data.txt","a+")
来保存文件则正常,而如果把QFile file作为本控件的一个成员,也不能够写入,请问难道用kill来结束程序时,程序是否就不能写入全局打开的文件了?谢谢帮助!
[ 此帖被babyfacewa在2010-01-11 10:21重新编辑 ]
离线babyfacewa

只看该作者 4楼 发表于: 2010-01-12
谢谢xtfllbl的解答, 不过似乎不是想象的答案, 因为现在发现问题可能出现在线程上 , 一个是后台数据接收线程,向GUI线程发送数据,当把fp设为全局变量并在GUI或接收线程中对其追加写入时,如果用kill命令来结束此程序则发现数据全部未写入, 采用fflush来保证即时写入后却发现程序陷入了死锁.(但程序中并未用锁Qmutex,在接收线程中也只有一处文件写操作),实在不明所以,而如果只在需要写入文件时使用临时FILE *,则可以正常写入文件 .
离线xtfllbl

只看该作者 3楼 发表于: 2010-01-11
引用第2楼babyfacewa于2010-01-11 11:06发表的  :
谢谢hackself的帮助,我赶紧试验一下,使用fflush对FILE *fp方式是有效的,不过全局QFile类则应该使用什么方法来保证写入执行呢?

bool QIODevice::isWritable () const

Returns true if data can be written to the device; otherwise returns false.

This is a convenience function which checks if the OpenMode of the device contains the WriteOnly flag.
上海欢迎您
离线babyfacewa

只看该作者 2楼 发表于: 2010-01-11
谢谢hackself的帮助,我赶紧试验一下,使用fflush对FILE *fp方式是有效的,不过全局QFile类则应该使用什么方法来保证写入执行呢?
[ 此帖被babyfacewa在2010-01-11 14:42重新编辑 ]
离线hackself
只看该作者 1楼 发表于: 2010-01-11
Re:求助!为什么全局FILE不能写入?
fflush() ?    
快速回复
限100 字节
 
上一个 下一个