semctl error: Invalid argument
3842 단어 Linux
#include
#include
#include
#include
key_t semid;
struct sembuf sem_down = {0, -1, 0};
struct sembuf sem_up = {0, 1, 0};
union semun {
int val;
struct semid_ds *buf;
unsigned short *array;
struct seminfo *_buf;
};
void down()
{
semop(semid, &sem_down, 1);
}
void up()
{
semop(semid, &sem_up, 1);
}
int main()
{
int ret = -1;
union semun arg;
arg.val = 1;
semid = semget((key_t)22345, 1, IPC_CREAT|0666);
if(semid == -1) {
perror("semget error");
return 1;
}
ret = semctl(semid, 1, SETVAL, arg);
if(ret == -1) {
perror("semctl error");
return 1;
}
if(semid != -1) {
down();
printf("hello world.
");
sleep(10);
up();
}
return 0;
}
이상의 코드 컴파일은 통과할 수 있지만 실행할 때
semctl error: Invalid argument
오류가 발생했습니다.문제는
semctl
함수의 두 번째 매개 변수에서 나왔다.semctl
함수에 대한 설명은 다음과 같습니다.semctl() performs the control operation specified by cmd on the semaphore set identified by semid, or on the semnum-th semaphore of
that set. (The semaphores in a set are numbered starting at 0.)
괄호 안의 설명을 주의하십시오. 신호가 신호량에 집중된 번호는 0에서 시작되고, 우리가 있는 두 번째 파라미터는 1이며, 생성된 신호량에 하나의 신호만 집중되어 있기 때문에 파라미터가 무효한 오류가 발생할 수 있습니다.
수정이 완료되면 다음과 같습니다.
ret = semctl(semid, 0, SETVAL, arg);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다. 웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다. reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.