linux - 从 semop 获取无效参数

标签 linux process semaphore

我在进程 A 中设置了(semget + init 为 1)一个信号量。 fork A,并得到 B。

fork B 并得到 C(进程 B、C 的代码位于另一个 .c 文件中,因此我使用 extern int semid 将 semid 作为全局整数传递)。

在进程 C 代码中,我尝试应用 down(semid) 并收到“无效参数”错误。
我在 down 函数的代码中所做的是这样的:

struct sembuf sem_d;
sem_d.sem_num = 0;
sem_d.sem_op = -1;
sem_d.sem_flg = 0;
if ( semop(semid, &sem_d, 1) == -1 )
{
    perror("error with down function");
    return -1;
}

我做错了什么?

我还保证了信号量初始化时的 semid 与 semop 之前的相同。
另外,在进程 A,B 中我使用 wait(-1)。

最佳答案

我不确定是否允许您在 fork 上使用 semget() - 毕竟这是一个不同的进程空间。

semget() 无论如何都是旧 System V 信号量的一部分。

我建议切换到 POSIX semaphores - sem_open()sem_wait() 和 friend 并使用命名信号量。然后在每个进程中打开相同的信号量名称。

关于linux - 从 semop 获取无效参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13691016/

相关文章:

linux - 我的 "ssh + nohup"脚本有什么问题

python - 导入错误:没有名为函数的模块

linux - Fork()-ing 一个新进程

linux - 如何在 Linux 上检测正在使用声卡的进程?

linux - 如何查看哪个路径已经在运行进程?

c++信号量不考虑调用顺序

multithreading - 使用线程和信号量时的段错误,Mac Vs Linux

c++ - 如何使用套接字 api getaddrinfo 绕过本地 DNS 缓存?

java - try catch 信号量的正确方法

c++ - 从 popen 执行命令 shell 并设置其他命令 shell