gpt4 book ai didi

c - sem_getvalue()引起的段错误

转载 作者:行者123 更新时间:2023-11-30 16:48:22 25 4
gpt4 key购买 nike

我正在使用 中包含的信号量用 C 编写一小段代码,但我无法继续,因为在 sem_getvalue 行上我总是遇到段错误。有人可以解释一下为什么吗?谢谢

编辑:我用 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);

最佳答案

很难确切地说出了什么问题,但我会尝试。

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

    int current = -N;
    sem_getvalue(sem,&current);
  • 我建议使用 perror() 函数而不是 printf 进行错误处理,因为它会打印带有错误详细信息的人类可读消息:

    sem_t* proc_semaphore = sem_open(SEM_PROC, O_CREAT, "0777", 0);
    if (proc_semaphore == SEM_FAILED) {
    perror("ERROR:");// e.g. "ERROR: Permission denied" or similar
    exit(1);
    }
  • 您将SEM_PROC定义为"/semname,这会在为我创建信号量时导致“权限被拒绝”错误。您应该定义普通用户可以使用的名称(例如“semname”)。

关于c - sem_getvalue()引起的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42986903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com