日期:2014-05-16  浏览次数:20587 次

signal处理函数中的文件操作问题
有一进程产生了一个新的文件。
然后通过signal的方式通知另外一个进程来取文件
由于是软中断的方式,
另一个进程的信号处理函数中读文件经常会出问题。
读到的是更新前的文件或者直接是空文件。
大概原因是信号处理函数是从硬盘中读取文件。
而产生文件的进程即使把文件描述符关闭,仍然没有把文件真正写入硬盘。


请问各位如何解决这个问题?


------解决方案--------------------
int fsync(fd)
调用这个函数刷新试试
------解决方案--------------------
(1)文件已经关闭了,还怎么刷新?所以close和sync顺序反了。
(2)调用了fclose()或者close(),OS自然会把文件写到磁盘中。
你可以在close()后面sleep几秒,然后去看文件是否已经写入了。
(3)用rename时,把源文件和目标文件弄反了。