Socketpair 只打印标准输入的第一行

Socketpair is only printing the first line from stdin

我正在用 C 语言做一个涉及 fork()socketpairs 的简单项目。该程序 fork 一个进程,然后为进程创建一个套接字对以相互通信。 parent 进程一次一行地从 stdin 读取行,直到 EOF,然后将这些行一行一行地发送到 child。 child 将行转换为大写并将它们发送回 parent,后者将它们发送到标准输出。这是我的代码

#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 才能退出。我如何让套接字循环直到 EOF 打印修改后的行?

My program prints the first line from stdin capitalized, but then it hangs. I have to ctrl-c to exit. How do i get the sockets to loop thru until EOF printing the modified lines?

您的子进程例程(即执行 toupper() 调用的例程)仅调用 read() 一次,然后调用 write() 一次,然后退出。这就是为什么只处理一行。要使其执行多行,您需要将代码放入循环中:

[...]
  else{
    while(read(socket[0], buffer, bufferSize) > 0)
    {
       for(j = 0; j[buffer];j++){
         buffer[j] = toupper(buffer[j]);
       }
       write(socket[0], buffer, bufferSize);
    }
  }
  return 0;
}