FT, 出去转了一圈这种好事让我给错过了。
先说一个小问题,你的 open system call 是错的。
0666 file permission 只有 O_CREAT 才有用, open 的时候
是不用的。
open(cPath, O_RDONLY, 0666);
应该是
open(cPath, O_RDONLY) 就可以了。
不过这个错误应该不妨碍任何东西。kernel 如果没有 O_CREAT
忽略 mode。
假设你的外部函数是 blocking 的而且不能自己修改 source code.
这样的话你一定要有两个 thread. 其中一个thread 去你的外部笨蛋
函数,另外一个 thread 读那个文件。
你可以用简单的 while sleep 来等那个文件被创建。比较高手一点的
可以用inotify events, 就是用文件系统的修改 event 来驱动你那个
读的 thread。你要注册两个 event watching。一个是那个文件的创立的
event, 这个通知你什么时候那个文件被创建了。另一个是这个文件被
打开以后,任何修改的 event。这样你不用傻 sleep 等那文件被写
东西。文件被写自动有 event, 唤醒你的读的 thread 去读文件。
用 inotify 的话就完全不用 sleep, 完全是 event driven 的。