作者WalkingIce ( 杀手哥吉拉 13)
看板LinuxDev
标题Re: Linux 上面读取档案发生超奇怪问题
时间Tue Apr 14 03:31:37 2009
※ 引述《yoco315 (眠月)》之铭言:
: ※ [本文转录自 C_and_CPP 看板]
: 作者: yoco315 (眠月) 看板: C_and_CPP
: 标题: Linux 上面读取档案发生超奇怪问题
: 时间: Mon Apr 13 14:26:36 2009
: 当 [1] 的地方,已经把档案写好了,而且也 fclose() 关闭档案了。
: 在 [2] 的地方,fopen 有拿到东西,不是 NULL,但是当我要读取的时候,却什麽也读不到。
: 我呼叫 perror(),系统给的错误讯息是「No such file or directory.」
: 问题是我开档的时候明明开到了!
: 事情真的很奇怪,
: 这个现象不是永远都发生,只有「有时候」发生。
: 如果我在 [2] 之前 sleep() 一段时间,
: 那我就可以顺利读取到档案。
刚刚问强者我同事的结果,给你做一点参考
Tick@0xlab says:
[02:27:46] 如果 fs mount 时为 async (一般都是) 在写档时,真实的动作会在
function 回应你之後才做
[02:28:17] 写档之时,可能会写到另一个 inode
[02:28:28] 而且 unlink 本来的 inode
[02:28:50] 虽然档名相同,但 inode 不同
[02:30:06] 开档时可能 inode 还在,但要读时,inode 比改掉了
[02:30:59] 本来的方法可以 work 的原因是,因为都在等 fs 的 flag
[02:31:18] 一定要等到 fs 真实写入後才读得到
[02:31:24] 所以不会出错
[02:31:34] 但一定会等很久
[02:32:08] 所以我的建议是在 [1] 之後 client 要先做一个 sync
[02:32:25] 才发封包
[02:32:45] master 其实也是相同的。
[02:35:46] fsync fdatasync
--
随手关电脑,救救北极熊
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.194.177.157