{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

Linux文件读写问题?

wenziwenzi 回答0 收藏1
问题描述:如果服务器内有一个大文件,有一个进程正在执行cp命令对该文件进行覆盖操作,同时另一个JAVA进程正在准备打开IO对这个文件进行读操作,那这个JAVA进程可以读取到这个文件吗?
收藏问题

2条回答

SimpleTriangle

SimpleTriangle

回答于2022-06-28 11:49

这个问题需要考虑两个问题,一个是cp进程写文件的时候有没有获取读锁,另一个是读进程是以阻塞方式还是非阻塞方式打开文件。

如果cp进程获取了读锁,而读进程是以非阻塞方式打开文件,那么是不可能读取成功的;

如果读进程以阻塞方式打开文件,那么会一直等待直到cp进程释放读锁,最终会读取成功;

如果cp进程没有获取读锁,读进程以非阻塞方式打开,如果读进程比写进程快,那就会读取失败,如果读进程比写进程慢,那还是有机会读取成功的。

如果读进程以阻塞方式打开文件,只要没遇到文件结束符EOF,那么读进程会边读边等待,直到cp进程完成写入,读进程也就完成读取。

综上所述,如果你的读进程是以阻塞方式读取文件,那么最终是一定会读取成功的,如果是以非阻塞方式读取文件,那么可能会面临读取失败的风险。

你可以做一个简单的实验验证一下,用ctrl-z先将cp写进程放入bash后台暂停,然后看看读进程的反应,然后再将写进程继续运行,再看看读进程反应

评论0 赞同0
  •  加载中...
msup

msup

回答于2022-06-28 11:49

个人感觉是可以的,一个文件一边在写,另一个程序在读,完全不影响。最典型的用tail查看日志文件不就是一个程序写一个程序读。

评论0 赞同0
  •  加载中...

相关问题

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<