在tmp文件夹中打开文件时,无法使用信号量

时间:2018-10-03 07:47:11

标签: c unix concurrency posix semaphore

因此,我正在尝试使用多进程(叉)的并发性。

我首先在本地文件夹中运行了代码,代码运行正常。但是,当我尝试将文件设置为UNIX中的tmp文件夹时,我的代码不会因信号而阻塞。在我看来,当从tmp文件夹中打开文件时,每个进程将完成所有工作而不是拆分工作,或者在极少数情况下,1个进程将完成所有工作,而其他两个进程以某种方式永远无法访问锁。

让我发疯的是,如果它适用于本地文件,那么没有理由在tmp文件夹中失败。

基本目标是我有一组来自fork()的子进程,只有一个进程控制着CS,即打开文件,从文件中读取值,存储值,关闭文件,修改值,打开文件,写入值文件,关闭文件,然后结束CS。我正在使用POSIX semaphore

tmp / file.txt是否有sem_wait()/sem_post()问题的任何原因。任何指针都会有所帮助。

两个代码之间唯一的区别是:

fd = open("Seq.txt", O_RDONLY);

vs

fd = open("tmp/Seq.txt", O_RDONLY);

我需要发布更大的代码段吗?

1 个答案:

答案 0 :(得分:1)

了解路径名的解析方式对您很有帮助,这样您以后就可以避免此类错误。

根据Path resolution的在线参考:

相关摘录:

  

如果路径名以'/'字符开头,则开始查找      directory是调用进程的根目录。 (一个过程      从其父级继承其根目录。通常这将是      文件层次结构的根目录。

     

如果路径名不是以'/'字符开头,则以      解析过程的查找目录当前正在工作      进程的目录。

     

以'/'字符开头的路径名称为绝对      路径名。不以'/'开头的路径名称为相对      路径名。

您可以浏览整个页面,这将非常有帮助。

如果由于长度原因要避免使用绝对路径名,
您还可以考虑使用openat()代替open()