fork()
및 socketpairs
과 같은 간단한 프로젝트를 C에서 수행하고 있습니다. 프로그램이 프로세스를 포크 (fork)하면 프로세스가 서로 통신 할 소켓 쌍이 생성됩니다. 부모 프로세스는 한 번에 하나씩 stdin에서 EOF까지 줄을 읽은 다음 줄을 하나씩 자식에게 보냅니다. 자식은 줄을 대문자로 변환하여 부모에게 보낸다. 부모는 stdout으로 보낸다. 여기 내 코드는Socketpair는 stdin의 첫 번째 줄만 인쇄합니다.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/socket.h>
int main(int argc, char *argv[]) {
/* code */
int returnCode, status, socket[2], j;
char* buffer;
size_t bufferSize = 100;
size_t line;
buffer = (char *)malloc(bufferSize * sizeof(char));
socketpair(AF_UNIX, SOCK_STREAM, 0, socket);
returnCode = fork();
if(returnCode == -1){
printf("Fork failed\n");
}
if(returnCode > 0){
while(getline(&buffer, &bufferSize, stdin) != -1){
write(socket[1], buffer, bufferSize);
read(socket[1], buffer, bufferSize);
printf("%s", buffer);
}
}
else{
read (socket[0], buffer, bufferSize);
for(j = 0; j[buffer];j++){
buffer[j] = toupper(buffer[j]);
}
write(socket[0], buffer, bufferSize);
}
return 0;
}
내 프로그램은 대문자로 시작하는 첫 줄을 인쇄하지만 멈 춥니 다. 나는 Ctrl-c를 눌러 종료해야합니다. 수정 된 줄을 인쇄 할 때까지 어떻게 소켓을 반복합니까?
개행 문자가 stdin의 끝에 남았는지 확인하고 반복적으로 읽는 것을 반복합니다. 선. 당신은 일종의 무시 명령을해야합니다. 꽤 일반적인 질문입니다. 따옴표없이 "stdin newline ignore"를 검색하십시오. – xaxxon