gpt4 book ai didi

c - 线程进给其他多线程

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

我发现使用 fork 在两个进程之间打开管道很容易,但是我们如何将打开的管道传递给线程。假设我们需要“可能通过多个线程”从程序 A 传递到程序 B,程序 B 将其输出发送到程序 C

编辑: 我修改了代码之后又来了,变得更容易阅读了。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <fcntl.h>

void *thread1(void *arg) {

int status, fd[2];
pid_t pid;

pipe(fd);
pid = fork();

if (pid == 0) {
int fd2 = *((int *) (arg));
dup2(STDIN_FILENO, fd2);

close(fd[0]);
dup2(fd[1], STDOUT_FILENO);
close(fd[1]);

execvp("PROGRAM B", NULL);
exit(1);
} else {
close(fd[1]);
dup2(fd[0], STDIN_FILENO);
close(fd[0]);

execl("PROGRAM C", NULL);
wait(&status);

return NULL;
}
}

int main(void) {


FILE *fpipe;
char *command = "PROGRAM A";
char buffer[1024];

if (!(fpipe = (FILE*) popen(command, "r"))) {
perror("Problems with pipe");
exit(1);
}

char* outfile = "out.dat";
//FILE* f = fopen (outfile, "wb");
//int fd = fileno( f );

int fd[2];
fd[0] = open(outfile, O_WRONLY);

pthread_t thid;
if (pthread_create(&thid, NULL, thread1, fd) != 0) {
perror("pthread_create() error");
exit(1);
}

int len;
while (read(fpipe, buffer, sizeof (buffer)) != 0) {
len = strlen(buffer);
write(fd[0], buffer, len);
}

pclose(fpipe);

return (0);
}

最佳答案

对于进程内消息传递,POSIX 队列可能比管道更适合您的需求。查看 man mq_overview (或 online )。

关于c - 线程进给其他多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2753089/

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