슈퍼 유저 프로세스에서 mkfifo()
을 사용하여 파이프를 생성해야하는데, 그 파이프는 수퍼 유저가 아닌 프로세스에서 쓰기 가능해야합니다.mkfifo의 슈퍼 사용자 프로세스에서 사용 권한을 부여하십시오.
리더 :
int main() {
char *myfifo = "/tmp/myfifo";
int buf;
mkfifo(myfifo, 0777); //problem here
FILE *fp;
fp = fopen(myfifo,"r");
if (fp == NULL) {
unlink(myfifo);
return -1;
}
printf("received: %d\n",buf);
fclose(fp);
unlink(myfifo);
return 0;
}
저자 :
int main() {
FILE *fp;
char *myfifo = "/tmp/myfifo";
fp = fopen(myfifo,"w");
if (fp == NULL)
return -1;
fprintf(fp, "%d ", 2);
fclose(fp);
return 0;
}
내가 ./writer
및 sudo ./reader
호출합니다.
필자 필자가 세그먼트 오류를 반환하는 파이프에 쓰려고 할 때. 그리고 내가 /tmp/myfifo
을 보면 그 사용 권한이 prwxr-xr-x
인 것을 알았지 만, prw-rw-rw-
을 원합니다.
'fopen()'이 파일을 열 었는지 확인하지 않았기 때문에 세그먼테이션 오류가 발생합니다. 권한이 원인 일 가능성이 높지만 'fp == NULL'을 확인하지 않는 것이 좋습니다. –
GDB는 여러분의 친구입니다! segfault * always *는 프로그래밍 오류를 나타냅니다. –
맞아,하지만 이건 예제 야. 이제는 수정하겠습니다. 만약'fp! = NULL'을 확인해도 세그먼트 화 오류가 발생합니다 : – billi90