선택적 클래스 할당을 위해 서버 프로세스와 클라이언트 프로세스를 만들고 서로 통신하도록하려고합니다.write for open write "해당 장치 또는 주소가 없음"
1) 우리는 소켓
을 사용할 수 없습니다) 우리는3을 쓰기 위해 2 FIFO를, 읽기 전용으로 하나 하나를 작성해야합니다)
2 O_NONBLOCK
을 사용해야합니다 교수는라고 우리에게 이야기그래서 서버 프로세스에 2 개의 FIFO를 만들었고 열려고 시도했지만 WRONLY에 대한 열기는 "해당 장치 또는 주소 없음"을 반환했습니다.
서버 프로세스 :
......
if(mkfifo("fifo1", PERMS) < 0 && errno != EEXIST)
{
perror("can't create FIFO (read)");
exit(EXIT_FAILURE);
}
if(mkfifo("fifo2", PERMS) < 0 && errno != EEXIST)
{
perror("can't create FIFO (write)");
exit(EXIT_FAILURE);
}
if((readfd = open("fifo1", O_RDONLY | O_NONBLOCK)) < 0)
{
perror("console: can't open read FIFO");
exit(EXIT_FAILURE);
}
if((writefd = open("fifo2", O_WRONLY | O_NONBLOCK)) < 0)
{
perror("coord: can't open write FIFO");
exit(EXIT_FAILURE);
}
클라이언트 프로세스 : 나는 온라인 솔루션을 보면서 내가 무엇이 잘못되었는지 잘 설명 this 대답을 발견하지만, 아무튼
.....
if((readfd = open("fifo2", O_RDONLY | O_NONBLOCK)) < 0)
{
perror("console: can't open read FIFO");
exit(EXIT_FAILURE);
}
if((writefd = open("fifo1", O_WRONLY | O_NONBLOCK)) < 0)
{
perror("console: can't open write FIFO");
exit(EXIT_FAILURE);
}
while(fgets(buffer, 100, stdin)) //char buffer[100];
{
n = strlen(buffer);
w = write(writefd, buffer, n);
memset(buffer, 0, 100);
}
문제를 해결할 방법을 제안하지 않습니다. 다시 온라인으로 보았는데 select()으로 나타났습니다. 솔루션을 제공 할 수있는 것처럼 보였지만 정확히 작동하는지 이해하는 데 어려움이있었습니다.
select()을 사용하면이 문제를 해결할 수 있습니까?
그래서 while (1) 또는 for (;;) 루프를 작성하기 위해 open for write를 사용하여 간단한 루프를 제안합니다. 처음에는 한 번만 발생하기 때문에 좋은 해결 방법이라고 생각합니다. 감사합니다 –
@FotisSk 예. 이론적 근거를 설명하는 주석과 왜 더 많은 노력을 기울일 가치가 없는지에 대한 설명을 추가하십시오. –
예, 할 것입니다. 그건 그렇고, 뭔가 나에게 다가왔다. 읽기 (또는 다른 임의의 명령)가 -1을 반환하면 무시하고 다시 읽으려면 "확인"됩니까? 도와 주셔서 미리 감사드립니다 !! –