我正在用 C 语言做一个简单的项目,涉及fork()
和socketpairs
。该程序分叉一个进程,然后创建一个套接字对以供进程相互通信。父进程一次从标准输入读取一行,直到 EOF,然后将这些行一一发送给子进程。孩子将这些行转换为大写并将它们发送回父级,后者将它们发送到标准输出。这是我的代码
#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;
}
我的程序从大写的 stdin 打印第一行,但随后挂起。我必须按 ctrl-c 才能退出。我如何让套接字循环直到 EOF 打印修改后的行?