gpt4 book ai didi

c - Socketpair 仅打印 stdin 中的第一行

转载 作者:行者123 更新时间:2023-11-30 15:05:11 25 4
gpt4 key购买 nike

我正在用 C 语言做一个简单的项目,涉及 fork()socketpairs。该程序 fork 一个进程,然后创建一个套接字对,以便进程之间能够相互通信。父进程从 stdin 一次读取一行,直到 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;
}

我的程序打印标准输入的第一行大写,但随后它挂起。我必须按 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;
}

关于c - Socketpair 仅打印 stdin 中的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39990123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com