c - 为什么信号量被获取而不被创建?

标签 c linux ipc semaphore

我正在尝试掌握信号量。我编写了一个处理信号量的程序,其中我有这个函数来创建单个信号量:

int semcreate()
{
    semp = semget(ftok("./output.txt", 'a'),1,IPC_CREAT|IPC_EXCL|0664);

    if(semp == -1) /*Semaphore exists, fetch*/
    {
        printf("Semaphore fetched\n");
        semp = semget(ftok("./output.txt", 'a'), 1, 0);
    }
    else if(semp>=0) /*Semaphore created here*/
    {
        printf("Semaphore created\n");
        seminit(); /* Initialize semaphore*/
    }
    return 1;
}

当我从两个单独的终端运行该程序时,两个实例都会打印Semaphore fetched。这是正确的行为吗?为什么?

enter image description here

最佳答案

系统上可能存在该信号量。使用命令ipcs列出系统中的所有信号量,并使用ipcrm删除您的程序创建的信号量。

关于c - 为什么信号量被获取而不被创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15881064/

相关文章:

c - 如何强制用户输入正整数?

c - 使用 Microsoft Media Foundation 从非文件源解码音频

PHP 内存限制取决于系统的硬盘还是 RAM?

linux - 如何在运行 systemd 的机器上启动期间的特定时间加载 linux 模块

c# - 从 exe C# 向另一个 exe 传递消息

c++ - 不同进程之间交换和存储值

c - 如何在C中读取二进制文件并保存到数组?

python - Paramiko sed 查找和替换不会通过

c++ - 在 "<name>.exe": 0xC0000005: Access violation writing location 0x0000000000000000 中的 0x00007FFF168E1657 (vcruntime140d.dll) 抛出异常

delphi - 根据正在使用的套接字杀死 Delphi 应用程序