fork()
とを含む C で簡単なプロジェクトを行っていsocketpairs
ます。プログラムはプロセスをフォークし、プロセスが互いに通信するためのソケットペアを作成します。親プロセスは、stdin から一度に 1 行ずつ EOF まで読み取り、その行を 1 行ずつ子プロセスに送信します。子は行を大文字に変換し、親に送り返します。親はそれらを stdout に送ります。これが私のコードです
#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 が変更された行を出力するまでソケットをループさせるにはどうすればよいですか?