gpt4 book ai didi

C: unix socket -> 断管

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:52 24 4
gpt4 key购买 nike

<分区>

我试图让套接字在 C 代码中工作,而不是调用命令行查找。

通过管道传输到 child2 函数“cut”的子 3“排序”函数工作正常,当执行时包含所有 3 个子函数时,程序卡在父进程 waitpid() 中。

我试图隔离唯一参与套接字的 child ,当我在 gdb 上运行可执行文件时,我收到消息“find: 'standard output': Broken pipe”和“find: write error”

这是与套接字交互的两个子函数的示例: child 1:

void child1()
{
int sock;
struct sockaddr_un remote;

sock = socket(AF_UNIX, SOCK_STREAM, 0)
memset(&remote, 0, sizeof(struct sockaddr_un));
remote.sun_family = AF_UNIX;
strncpy(remote.sun_path, "socket", sizeof(remote.sun_path) - 1);

while((connect(sock, (struct sockaddr *)&remote, (socklen_t)sizeof(remote))) == -1)
{
if(errno != ENOENT && errno != ECONNREFUSED)
erro("child 2 failed to connect to socket");
}
dup2(sock, 1);
close(sock);
execlp("find", "find", ".", "-type" , "f", "-ls", NULL);
}

和 child 2:

void child2(int *pipe_fd)
{
int sock;
struct sockaddr_un local, remote;
socklen_t sock_size = (socklen_t)sizeof(remote);

sock= socket(AF_UNIX, SOCK_STREAM, 0);

memset(&local, 0, sizeof(struct sockaddr_un));
memset(&remote, 0, sizeof(struct sockaddr_un));

local.sun_family = AF_UNIX;
strncpy(local.sun_path, "socket", sizeof(local.sun_path) - 1);
unlink("socket");
bind(sock, (struct sockaddr *)&local, sizeof(struct sockaddr_un));

listen(sock, 1);
sock = accept(sock,(struct sockaddr *)&remote, &sock_size));
dup2(sock, STDOUT_FILENO);
close(sock);

close(pipe_fd[0]);
dup2(pipe_fd[1],1);
close(pipe_fd[1]);
execlp("cut", "cut", "-d", " ", "-f", "3-", NULL);
}

这个问题不需要具体解决,我只是想了解我在创建过程中做错了什么,以后不会再犯了。我提前感谢任何帮助。

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