0
char* cath="/cath";
char* cathFlag="/cathf";
char* hyp="/hyp";
char* hypFlag="/hypf";

printf("SEMS OPEN\n");
sem_t *csem = sem_open(cath, O_CREAT, 0777, 0);
printf("CSEM: %d\n", *csem);
perror("ERROR: ");
sem_t *cfsem = sem_open(cathFlag, O_CREAT, 0777, 0);
sem_t *hsem = sem_open(hyp, O_CREAT, 0777, 0);
sem_t *hfsem = sem_open(hypFlag, O_CREAT, 0777, 0); 
printf("SEMS OPENED\n");

sem_open0 を返し、perrorSuccess を書き込みます。セマフォは開きません。を調べsem_overviewたところ、最初にスラッシュがない名前に問題がある可能性があることがわかりました。追加しても役に立ちませんでした。セマフォへのアクセスはありませんsem_post。セグメンテーション フォールトでシェル アボート プロセスが呼び出されると、離陸します。問題が何であるかを理解するのを手伝ってください。編集:システムを再起動すると(そしてセマ​​フォを消去しますか?)、perrorは「そのようなファイルまたはディレクトリはありません」を返しますが、「成功」を返します。

4

1 に答える 1

0

これが私が試したもので、動作します:

#include <fcntl.h>           /* For O_* constants */
#include <sys/stat.h>        /* For mode constants */
#include <semaphore.h>
#include <stdio.h>


int main(void)
{

char* cath="/cath";
char* cathFlag="/cathf";
char* hyp="/hyp";
char* hypFlag="/hypf";

printf("SEMS OPEN\n");
sem_t *csem = sem_open(cath, O_CREAT, 0777, 0);
//perror("ERROR: ");
sem_t *cfsem = sem_open(cathFlag, O_CREAT, 0777, 0);
sem_t *hsem = sem_open(hyp, O_CREAT, 0777, 0);
sem_t *hfsem = sem_open(hypFlag, O_CREAT, 0777, 0); 
printf("SEMS OPENED\n");

}

私はそれをコンパイルしました:

$ gcc tsem.c -l pthread

私はそれを実行します:

$ ./a.out
SEMS OPEN
SEMS OPENED

私は/dev/shmを見ました:

$ ls /dev/shm
sem.cath  sem.cathf  sem.hyp  sem.hypf
于 2020-10-17T13:37:44.257 に答える