2011-11-08 3 views
0

enter image description hereFIFO 서버 프로그램

위의 프로그램은 Linux에서 입력했습니다. 기본적으로 클라이언트와 서버를 별도의 터미널에 연결해야합니다. 내가, 올바른 순서로 즉

  1. 컴파일 서버를 실행할 때 -> 실행 서버
  2. 컴파일 클라이언트 -> 실행 클라이언트

단자는 아무것도 모릅니다. 첫 번째 printf 문에 "Trying to connect" 부분을 인쇄하지 않습니다. 여기에 실수가 무엇입니까? @parapura 라지 쿠마르 말했듯이

편집

나는 mkfifo의 반환 값을 검사. 그러나 여전히 동일하게 남아 있습니다. 다음은 서버에 대한 변경된 코드입니다.

if(mkfifo("fifo1",0666)<0) { 
    printf("Error"); 
} 
if(mkfifo("fifo2",0666)<0) { 
    printf("Error"); 
} 
fflush(stdout); 
+0

, ')를 사용하면 출력이 플러시되어 콘솔에 표시됩니다. 그러면'fflush'가 필요 없습니다. –

답변

2

교착 상태가되었습니다. 서버 대기 열기 ("fifo1", O_RDONLY) 및 클라이언트 대기 열기 ("fifo2", O_RDONLY).

편집 client.c :

`새로운 라인으로 printf` (`\ n을 종료하는 것이 좋습니다 여러`printf` 호출을 사용하여 한 줄에 더 인쇄하려고하지 않는 한
int writefd = open("fifo1",O_WRONLY); 
int readfd = open("fifo2",O_RDONLY); 
+0

좀 더 명확히 말하면, fifo는 일반적으로 다른 사람이 열어서 연결될 수있을 때까지 차단합니다. (기본적으로 최소한 비 블로킹 모드로 열릴 수 있습니다 만, 이것은 일을 더 복잡하게 만듭니다.) – wnoise