3
저는 월요일에 연구소가 나오기 전에 FIFO와이 낮은 레벨의 I/O에 대한 통찰력을 얻으려고 노력해 왔습니다.FIFO 파일 및 읽기/쓰기
프로그램을 수행해야합니다
서버 :
- 는
- 5 메시지 전송, FIFO를를 만듭니다
- 는 FIFO를을 삭제, 5 초 간격으로, "메시지 #I을"
클라이언트 :
- 는 FIFO에서 읽고 메시지를 표시 6 초 동안 MSG가 없었다 경우
- 종료,
을 그리고 그것은 그러나 통신 않으며, 클라이언트는 내가 그를 보낼하지 않았다 정확히 표시하고, 더 중요한 것은 새로운 메시지가 도착할 때마다 처음부터 읽는 것 같습니다. 나는 꽤 오랫동안 알아 내려고 노력해 왔으며 문서가 말한 것과 일치하지 않는 것 같습니다. 제발 도와주세요! :(
서버
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int s2c, c2s, i;
char fifo_name1[] = "/tmp/fifo1";
char fifo_name2[] = "/tmp/fifo2";
char msg[80], buf[10];
struct stat st;
// if no fifos, create 'em
if (stat(fifo_name1, &st) != 0)
mkfifo(fifo_name1, 0666);
if (stat(fifo_name2, &st) != 0)
mkfifo(fifo_name2, 0666);
s2c= open(fifo_name1, O_WRONLY);
c2s= open(fifo_name2, O_RDONLY);
// start sending messages, with 5s interval
for (i=0; i<5; i++)
{
printf("Message #%d \n", i);
strcat(msg, "Message #");
strcat(msg, itoa(i, buf, 10));
strcat(msg, "\0");
write(s2c, msg, strlen(msg)+1);
sleep(5);
}
// delete fifos
unlink(fifo_name1);
unlink(fifo_name2);
printf("server exit successfully");
return EXIT_SUCCESS;
}
클라이언트
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int c2s, s2c, c=0;
char buf[10];
char fifo_name1[] = "/tmp/fifo1";
char fifo_name2[] = "/tmp/fifo2";
s2c= open(fifo_name1, O_RDONLY);
c2s= open(fifo_name2, O_WRONLY);
// receive messages
while (1)
{
if (read(s2c, &buf, sizeof(char)*10) > 0)
{
printf("%s \n", buf);
c=0;
}
sleep(1);
c++;
if (c>6)
break;
}
printf("client exit successfully");
return EXIT_SUCCESS;
}
고마워, 그 지금 일하고있어! : D 나는 completly 틀린 장소에서 실수를 찾고 있었던 것처럼 보였다, 나에 대한 수치심 :( – Kreweta