繁体   English   中英

Linux / Linux中的文件和F_TLOCK问题

[英]Linux/ File in linux and F_TLOCK issue

我读了一本关于Linux中文件的书,它给出了下一个示例:

int main(char ** argv, int argc) {
  int stat;
  int fd = open("dugma1.txt", O_WRONLY, 0666);

  if (fork() == 0) {
    int fd2 = open("dugma1.txt", O_WRONLY, 0666);
    sleep(10);
    if (lockf(fd2, F_TLOCK, 17) >= 0) {
      write(fd2, "I was here second", 17);
    }
  } //if
  else {
    lockf(fd, F_TLOCK, 16);
    write(fd, "I was here first", 16);
    wait(&stat);    
  }
}

它说输出将是: I was here first ,原因是:我们没有关闭文件。 但是我不理解这种外植。 我们首先写: I was here first ,但是为什么在sleep(10)我们不去看代码的这一部分:

if (lockf(fd2, F_TLOCK, 17) >= 0) {
   write(fd2, "I was here second", 17);
}

F_TLOCK是非阻塞的,为此,我们将成功编写“我在这里第二”。

谢谢

lockf(fd2,F_TLOCK,17)

遇到错误(EAGAIN),因此返回-1。 写入文件所需的值等于或大于0,而不是-1。 测试失败,并且永远不会发生写入。

父级对打开的文件执行lockf(fd, F_TLOCK, 16) ,锁定前16个字节。 然后它将文本写入其中,并等待孩子退出。 它不会关闭文件,因此锁仍然存在。 如果close(fd); write()之后的父代代码中,该锁将被释放,但没有释放。

子级先休眠一段时间,然后尝试锁定文件的前17个字节,但这失败了,因为父级仍具有该锁定。 这就是为什么lockf(fd2, F_TLOCK, 17)失败并显示EAGAIN -稍后应重复该操作。 错误由返回值-1表示,该值使子代码中的条件条件不执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM