因此,我正在尝试使用多进程(叉)的并发性。
我首先在本地文件夹中运行了代码,代码运行正常。但是,当我尝试将文件设置为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);
我需要发布更大的代码段吗?
答案 0 :(得分:1)
了解路径名的解析方式对您很有帮助,这样您以后就可以避免此类错误。
根据Path resolution的在线参考:
相关摘录:
如果路径名以'/'字符开头,则开始查找 directory是调用进程的根目录。 (一个过程 从其父级继承其根目录。通常这将是 文件层次结构的根目录。
如果路径名不是以'/'字符开头,则以 解析过程的查找目录当前正在工作 进程的目录。
以'/'字符开头的路径名称为绝对 路径名。不以'/'开头的路径名称为相对 路径名。
您可以浏览整个页面,这将非常有帮助。
如果由于长度原因要避免使用绝对路径名,
您还可以考虑使用openat()
代替open()
。