gpt4 book ai didi

c - 通过管道将图像发送到C中的子进程

转载 作者:行者123 更新时间:2023-11-30 16:24:36 26 4
gpt4 key购买 nike

我的程序需要做的是创建子进程,然后将其转换为dipslay程序并通过管道向其发送PNG图像。我想我已经很接近了,但我不知道如何通过管道发送图像。

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>

int main(void)
{
int fd[2];
pid_t childpid;

char string[] = "";
char readbuffer[10000];
char buf[10000];
FILE *fptr;

pipe(fd);

if((childpid = fork()) == -1)
{
perror("fork");
exit(1);
}

if(childpid == 0)
{
//Child
close(fd[1]);
dup(fd[0]);
execl("/usr/bin/display","display", (char *)0);
read(fd[0], readbuffer, sizeof(readbuffer));
exit(0);
}
else
{
//Parent
close(fd[0]);
dup2(fd[1],1);
printf("Type name of the file:\n");
scanf("%s",string);
fptr = fopen(string, "r");
while ( fgets(buf, sizeof(buf), fptr) != NULL) {
write(fd[1], buf, strlen(buf));
}

fclose(fptr);

}

return(0);

最佳答案

首先,您需要关闭与标准输入关联的文件描述符。

close(0);

然后复制fd[0]。它应该有效。您不需要在父进程中复制 fd[1]。

我的程序:

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>


int main()
{
int pipe_fd[2];
int c;
FILE *file;


pipe(pipe_fd);

if(fork()==0)
{
//child
close(pipe_fd[1]);
close(0);
dup(pipe_fd[0]);
execl("/usr/bin/display","display", (char*)NULL);
read(pipe_fd[0], &c, 1);
exit(1);
}
// parent
close(pipe_fd[0]);
file=fopen("Lena2.pgm","r");
if(file==NULL)
printf("File error\n");
while(!feof(file))
{
c=getc(file);
write(pipe_fd[1], &c, 1);
}
}

关于c - 通过管道将图像发送到C中的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53602874/

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