두 개의 C 파일 server.c와 client.c가 있습니다. 서버는 fifo 파일을 생성하고 입력을 기다리는 동안 지속적으로 읽어야합니다. 클라이언트는 PID를 가져 와서 FIFO에 PID를 씁니다.FIFO에 pid를 쓰십시오 - C
int main(){
int fd;
int fd1;
int bytes_read;
char * buffer = malloc(5);
int nbytes = sizeof(buffer);
if((fd = mkfifo("serverfifo",0666)) == -1) printf("create fifo error");
else printf("create fifo ok");
if ((fd1 = open("serverfifo",O_RDWR)) == -1) printf("open fifo error");
else{
printf("open fifo ok");
while(1){
bytes_read = read(fd,buffer,nbytes);
printf("%d",bytes_read);
}
}
return(0);
}
그리고 내 클라이언트 파일 : 나는군요
int main(){
int fd;
int pid = 0;
char *fifo;
int bytes;
if ((pid = getpid()) == 0) printf("pid error");
char pid_s[sizeof(pid)];
sprintf(pid_s,"%d",pid);
if ((fd = open ("serverfifo",O_RDWR)) == -1)printf("open fifo error");
else {
printf("open fifo ok");
bytes = write(fd,pid_s, sizeof(pid_s));
printf("bytes = %d",bytes);
}
close(fd);
return(0);
}
두 가지 주요 문제가있다 : 이것은 내가 처음 시작 내 서버에 파일을 인 내가 파일에 PID를 쓸 때 그것은 반환 필자가 작성한 바이트 수는 괜찮아 보이지만 fifo 파일의 속성을 확인하면 0 바이트가됩니다. 두 번째 문제는 읽기가 작동하지 않는다는 것입니다. 인쇄하기 전에 printf를 실행하지만 읽지 않은 후에는 아무것도 반환하지 않고 그냥 멈 춥니 다. 사이트에 유사한 게시물이 많이 있다는 것을 알고 있지만 도움이되는 정보를 찾을 수 없습니다. CodeBlocks와 함께 Ubuntu 및 GCC 컴파일러를 사용하고 있습니다.
fifos는 정규 파일이 아닙니다. 파일의 크기가 0이라고보고하면 괜찮습니다. – yiding
나는이 코드의 모든 것이 어쨌든간에 잘못되었다는 것을 두려워합니다. 또한 코드 형식이 지저분하고 모호합니다. 클라이언트/서버 다중 프로세스 응용 프로그램을 진행하기 전에 C 프로그래밍에 대한 좋은 책을 읽는 것이 좋습니다. – Lundin