![](/img/trans.png)
[英]Write to a file present in Linux system having a Samba server from a windows system
[英]Reading file from linux samba share and caching
有2种类似的设置:
还有另一台PC(Win 7)和一个C#测试程序,它以上述循环方式从上述任一设置中读取文件内容:
现在,当我使用设置#1(共享)运行测试时-如果我在服务器上打开文件,则修改内容并保存-我可以立即在测试程序中看到反应-文件修改后的第一次循环迭代为我带来了新文件大小和新数据。
但是,当我使用设置#2(ubuntu共享)运行相同的测试时-在一段时间后,我看不到测试程序中修改后的大小或内容(该时间取决于我使用的读取文件内容的方法而有所不同)。 FileStream大约是10秒,而File.ReadAllBytes大约是30秒到10分钟。
带有设置2的有趣注释-如果我在Ubuntu中修改文件,然后转到测试PC(测试程序现在正在循环,试图获取更新的文件内容)并使用记事本打开共享文件-测试程序立即获得更新的内容。
在我看来,这就像是在测试机上进行客户端缓存。 我唯一能想到的是Win Server 2012使用SMB3和Ubuntu-SMB2_10,这以某种方式迫使客户端(测试读取器部分)以不同的方式运行。
我不是Linux专家,据我了解,无法在Ubuntu中启用SMB3协议(它可以作为SMB3客户端,但不能作为服务器)
因此,问题是如何强制客户端(Win 7)在不使用缓存的情况下进行读取,而不管服务器的类型和协议版本如何,或者,如果不可能的话-如何使用记事本模仿C#代码打开文件,这显然给了它一个踢并强迫所有读者获取最新内容。
找出在Linux samba配置(smb.conf)中禁用机会锁(oplocks)的方法。
禁用OpLocks后,客户端计算机上的测试程序无需缓存即可获取更新的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.