首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_locking()到底做了什么?

_locking()到底做了什么?
EN

Stack Overflow用户
提问于 2011-07-27 19:31:01
回答 4查看 486关注 0票数 5

在寻找this问题的答案时,我找到了_locking()函数。上面说it Locks or unlocks bytes of a file (实际上我不明白这句话到底是什么意思)。如果有人有使用此函数的经验,是否可以使用第一个问题中描述的函数来解决问题?

EN

回答 4

Stack Overflow用户

发布于 2011-07-27 19:33:29

引用您链接的MSDN页面:

代码语言:javascript
复制
int _locking(
   int fd,
   int mode,
   long nbytes 
);

_locking函数锁定或解锁由fd指定的文件的n字节字节。锁定文件中的字节可防止其他进程访问这些字节。所有锁定或解锁都从文件指针的当前位置开始,并在接下来的nbytes字节中继续进行。可以锁定超过文件末尾的字节。

票数 1
EN

Stack Overflow用户

发布于 2011-07-27 22:11:08

它只是保留一个文件范围,供获取文件锁的进程独占使用。如果锁定调用成功,则尝试读取或写入该文件部分的另一个进程将失败。这允许多个进程访问同一文件并以一致的方式更新它。它有点像一个文件范围的互斥锁。

基本上,它允许您以原子方式更新文件的各个部分,因此读取或写入文件的任何其他进程将看到(或更改)所有更新,或者不看到任何更新。它也适用于读取-你可以锁定你想要读取的文件的一个范围,以防止另一个进程在你正在读取它的过程中更改它的一部分。

但是进程仍然可以访问文件的其他部分,而不会出现错误或延迟。

它不会解决您提到的问题中的问题,因为_lock() on;t在进程粒度上工作。如果线程A锁定了一个文件范围,那么同一进程中的线程B仍然可以读/写该范围。为了防止同一进程中的另一个线程访问文件范围,该进程必须实现它自己的内部机制,以遵守文件范围已被另一个线程锁定的情况。至少我不知道在Win32应用程序接口中有什么东西可以做到这一点(我想可能有一些我不知道的东西)。

票数 1
EN

Stack Overflow用户

发布于 2011-07-27 21:40:52

http://msdn.microsoft.com/en-us/library/8054ew2f(v=vs.71).aspx

我发现这有助于“修复”问题Race condition

最后一个写入文件的人获胜。假设您只需要读取文件的前半部分,没有理由锁定整个文件。

因此,您以字节为单位获取文件大小,将其传递给此函数,然后将其锁定。

如果成功,该函数将返回0。返回值-1表示失败,在这种情况下,errno设置为MSDN页告诉您的内容。

回答您的问题

您可以获取文件的大小,然后将其锁定,但您将只能从文件中读取。您只需将其锁定为一种只读模式。

在wiki of Race条件下,它告诉你如何通过让第二个进程检查标志来锁定文件的示例,这在你的情况下可能会起作用,请查看它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6843568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档