当前位置: 技术问答>linux和unix
UNIX下两个进程对一个文件操作
来源: 互联网 发布时间:2014-12-15
本文导语: 一个进程对文件写,一个对文件读(先写后读),未写完就开始读和写完再读 其读的结果有区别吗 已知一个文件,可以知道是否有对此文件进行了打开操作的进程吗 求救! | 这种问题的...
一个进程对文件写,一个对文件读(先写后读),未写完就开始读和写完再读 其读的结果有区别吗
已知一个文件,可以知道是否有对此文件进行了打开操作的进程吗
求救!
已知一个文件,可以知道是否有对此文件进行了打开操作的进程吗
求救!
|
这种问题的处理应该采用标准的做法!利用文件的上锁机制!
粒度较粗,文件级.
在写文件的时候应该使用排他锁,这样文件是不可被读的,读文件的时候,文件上共享锁,这个时候文件可读不可写.
更好一点的方式是采用纪录上锁.flock,上锁也有读和写的区别。
你的那种做法,不出错误才叫做怪呢!
Does a good farmer neglect a crop he has planted?
Does a good teacher overlook even the most humble student?
Does a good father allow a single child to starve?
Does a good programmer refuse to maintain his code?
-- Geoffrey James, "The Tao of Programming"
粒度较粗,文件级.
在写文件的时候应该使用排他锁,这样文件是不可被读的,读文件的时候,文件上共享锁,这个时候文件可读不可写.
更好一点的方式是采用纪录上锁.flock,上锁也有读和写的区别。
你的那种做法,不出错误才叫做怪呢!
Does a good farmer neglect a crop he has planted?
Does a good teacher overlook even the most humble student?
Does a good father allow a single child to starve?
Does a good programmer refuse to maintain his code?
-- Geoffrey James, "The Tao of Programming"
|
用进程间通信,信号量、消息、管道、socket都行,写进程写完数据后向杜进程发送消息,读进程受到消息后在读,多完在回应写进程,写进程再继续写
|
读的结果会有区别,但我没试过。(在写程序时我会绕过这种情况)
查了基本资料,没找到关于一个文件是否打开的检测命令。(stat, fstat, fcntl,好像不行)。你用fcntl对打开的文件上锁,一个上锁的文件再打开时出错,可以试一试。
如果是一个写,一个读的 流模式(不rewind 或 lseek),用管道,命名管道更好些,正如 blh(老猫) 所讲。
查了基本资料,没找到关于一个文件是否打开的检测命令。(stat, fstat, fcntl,好像不行)。你用fcntl对打开的文件上锁,一个上锁的文件再打开时出错,可以试一试。
如果是一个写,一个读的 流模式(不rewind 或 lseek),用管道,命名管道更好些,正如 blh(老猫) 所讲。