리눅스 fifo에 관한 질문입니다. [질문수정입니다]
Emily
질문 제목 :리눅스 fifo에 대한 질문입니다질문 내용 :
안녕하세요 리눅스fifo에 대한 질문이 있어서 올립니다
질문이 있는데요.
rcvmessage의 (1)if ((fd = open(fifo, o_rdwr)) 0) 의 부분과
(2)if (read(fd, msgbuf, msgsiz+1) 0) 의 부분입니다.
첫번째로 (1)번의 부분만 rdonly로 바꿨을 경우 결과와 그런이유좀요
두번째로 (2)번의 부분만 0 의 부분을 =0으로 바꿨을 경우 결과와 그런이유좀요
세번째로 (1),(2)의 부분에서 rdonly과=0으로 둘다 바꿨을 경우 결과와 그런이유좀요
네번째로밑에 있는 예제 파일로 아무것도 안바꿨을 경우 결과와 그런 이유좀요
----------------------------------------------------------------------------------------
여기는 제가 실행해보고 찾아보고 생각해 본 이유입니다.
제가 알기로첫번째 예제로(1)번의 부분을rdonly했을경우 rcv쪽에서는최초 개방할때 반드시 쓰기 권한이 있어야한다고
들었습니다. 그래야지 최초 쓰기 개방전에는 모든 읽기를 block해 버린다고 들었는데요.
자세히 모르겠습니다.
그리고 (2)부분에서0 과 =0의 차이는 저는 실행해본결과 없었는데 그이유가 왜 그런지 잘 이해가 되지 않습니다
위에 4가지 질문에 대한 이유좀 설명해주시면 감사하겠습니다.
밑에는 간단한 fifo예제입니다. 주석은 간단하게 달았습니다.
/* sndmessage -- fifo를 통해 메시지를 받는다. */
#include fcntl.h
#include stdio.h
#include errno.h
#include string.h
#include stdlib.h
#define msgsiz 63
char *fifo = fifo;
main (int argc, char **argv)
{
int fd, j, nwrite;
char msgbuf[msgsiz+1];
if (argc 2)
{
fprintf (stderr, usage: sendmessage msg ... \n);
exit(0);
}
/* o_nonblock을 설정하여 fifo를 개방한다. */
if ((fd = open(fifo, o_wronly | o_nonblock)) 0)
{
perror(fifo open failed);
exit(0);
}
/* 메시지를 보낸다. */
for ( j = 1; j argc; j++)
{
if (strlen(argv[j]) msgsiz)
{
fprintf (stderr, message too long %s\n, argv[j]);
continue;
}
strcpy (msgbuf, argv[j]);
if ((nwrite = write (fd, msgbuf, msgsiz+1)) == -1)
{
perror(message write failed);
exit(0);
}
}
exit (0);
}/* rcvmessage -- fifo를 통해 메시지를 받는다. */
#include fcntl.h
#include stdio.h
#include stdlib.h
#include errno.h
#define msgsiz 63
char *fifo = fifo;
main (int argc, char **argv)
{
int fd;
char msgbuf[msgsiz+1];
/* fifo가 이미 존재하지 않으면, 생성한다 */
if (mkfifo(fifo, 0666) == -1)
{
if(errno != eexist){
perror(receiver: mkfifo);
exit(0);
}
}
/* fifo를 읽기와 쓰기용으로 개방한다. */
if ((fd = open(fifo, o_rdonly)) 0)
{perror(fifo open failed);
exit(0);
}
/* 메시지를 받는다 */
for(;;)
{
if (read(fd, msgbuf, msgsiz+1) 0)
perror(message read failed);
/*
* 메시지를 프린트한다*/
printf (message received:%s\n, msgbuf);
}
}
-
새
님 수정했습니다.
다시봐주시면 감사하겠습니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2700368 | if에 관해서 질문이요... | Orange | 2025-07-04 |
2700339 | 이거 결과값이 왜이런건지.. (4) | 그댸와나 | 2025-07-04 |
2700313 | 파일 읽어서 저장하는데 빈파일일 경우 문재가 발생하네요.. (2) | 크나 | 2025-07-03 |
2700287 | 구조체 동적할당 연습을 하는데 오류가 뜹니다...(해결) (3) | 아련나래 | 2025-07-03 |
2700264 | 문자와 숫자 동시에 입력??? | 글고운 | 2025-07-03 |
2700236 | txt파일로만 쓰고 읽게 하려면 어떻게 해야 하나요..?? (8) | 미국녀 | 2025-07-03 |
2700211 | 전위 연산자 (2) | 어른처럼 | 2025-07-02 |
2700183 | C에서 파일이름을 받고, 그 파일의 사이즈를 출력해줘야하는데 내용이 출력이 안되네요 ;ㅅ; | 피스케스 | 2025-07-02 |
2700150 | 꼭좀 도와주세요ㅠㅠㅠ | 호습다 | 2025-07-02 |
2700095 | 연산문제...질문... | 오빤테앵겨 | 2025-07-01 |
2700070 | while문 , 3의배수 출력하는 프로그램좀 짜주세욤. | 횃불 | 2025-07-01 |
2700041 | 초보인데요 ㅎ 배열안에 배열을 집어넣을수 있나요?? | 헛장사 | 2025-07-01 |
2700012 | 배열// (1) | 전갈자리 | 2025-07-01 |
2699895 | 무한루프에 빠집니다.!! 해결좀부탁드려요 (10) | 선아 | 2025-06-30 |
2699842 | 질문을 너무 많이 하네여.....죄송.... (2) | 해님꽃 | 2025-06-29 |
2699816 | 오류 질문입니다.. (1) | 해비치 | 2025-06-29 |
2699763 | 질문입니다 ! 꼭 좀 도와주세요ㅠㅠ (2) | 미라 | 2025-06-28 |
2699555 | c언어 다항식을 입력을 했는데 왜 출력이 안될까요? | 피스케스 | 2025-06-27 |
2699528 | C언어 포인터연산 질문입니다. (3) | 안녕나야 | 2025-06-26 |
2699476 | 끌어올림;;달력 짜봤는데요 이 소스 줄일 수 있나요? - 스샷첨부 (2) | 클라우드 | 2025-06-26 |