sem_getvalue()

时间:2017-03-23 21:01:49

标签: c process synchronization semaphore

我用C中包含的信号量在C中写了一小段代码,但我不能继续,因为在sem_getvalue行上我总是得到一个分段错误。有人能解释一下为什么吗? THX

编辑:我使用gcc -lpthread -lrt -l c编译

#include <semaphore.h>
#include <stdlib.h>

#define N 3
#define FILENAME "resource.txt"
#define SEM_PROC "/semname"

int main(){
    FILE* f = fopen(FILENAME, "w");
    sem_t* proc_semaphore = sem_open(SEM_PROC, O_CREAT, "0777", 0);
    if (proc_semaphore == SEM_FAILED) {
        printf("[FATAL ERROR] Could not open the named semaphore\n");
        exit(1);
    }
    printf("Sem created\n");
    int* current= malloc(sizeof(int)); *current = -N;
    sem_getvalue(proc_semaphore, current);
    printf("current value: %d\n:", *current);

1 个答案:

答案 0 :(得分:0)

很难肯定地说出了什么问题,但我尝试了。

  • 如果由于某种原因此函数无法为您分配内存,则malloc可以返回 NULL 。这可能会导致SEGFAULT。我建议用简单的 int 变量替换你的 int *:

    function classDefine(){
    var playerClass = document.getElementById('class').value;
    var playerLevel = document.getElementById('level').value;
    if (playerClass == "Barbarian" && playerLevel == "Level 1") {
    document.getElementById("fort").value = 2;
    document.getElementById("ref").value = 2;
    document.getElementById("will").value = 2;
    document.getElementById("baseAttackBonus").value = 2;
    }
    else if (playerClass == "Barbarian" && playerLevel == "Level 2"){
    document.getElementById("fort").value = 5;
    document.getElementById("ref").value = 5;
    document.getElementById("will").value = 5;
    document.getElementById("baseAttackBonus").value = 5;
    }
    }
    
  • 我建议使用perror()函数而不是printf来处理错误句柄,因为它会打印带有错误详细信息的人类可读消息:

    int current = -N;
    sem_getvalue(sem,&current);
    
  • 您将 SEM_PROC 定义为“/ semname ,在为我创建信号量时会导致”Permission denied“错误。您应该定义普通用户可以使用的名称(例如“semname”)。