Я новичок в Linux (Ubuntu), и мне нужно сделать код на C, который должен распаковать изображение, распечатать размер изображения и показать изображение. Мне нужно использовать zcat, wc (wc -c) и xview (xview stdin). Это мой код:Отображение изображения в C Ubuntu
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <errno.h>
int PID;
int PIPE1[2];
void zcat(char INPUT[])
{
dup2(PIPE1[1],STDOUT_FILENO);
close(PIPE1[0]);
close(PIPE1[1]);
execlp("zcat","zcat",INPUT,NULL);
perror("\nzcat malo\n");
exit(0);
}
void show_image()
{
dup2(PIPE1[0],STDIN_FILENO);
close(PIPE1[0]);
close(PIPE1[1]);
execlp("xview","xview","stdin",NULL);
perror("\nxview malo\n");
exit(0);
}
void image_size()
{
dup2(PIPE1[0], STDIN_FILENO);
close(PIPE1[0]);
close(PIPE1[1]);
execlp("wc","wc","-c",NULL);
perror("\nwc error\n");
exit(0);
}
void xview(char INPUT[])
{
if(pipe(PIPE1)==-1)
{
perror("\npipe1 malo\n");
exit(1);
}
if((PID=fork())==-1)
{
perror("\nfork1 error\n");
exit(1);
}
else if(PID==0) zcat(INPUT);
if((PID=fork())==-1)
{
perror("\nfork2 error\n");
exit(1);
}
else if(PID==0) show_image();
close(PIPE1[0]);
close(PIPE1[1]);
}
void wc(char INPUT[])
{
if(pipe(PIPE1)==-1)
{
perror("\npipe1 malo\n");
exit(1);
}
if((PID=fork())==-1)
{
perror("\nfork1 error\n");
exit(1);
}
else if(PID==0) zcat(INPUT);
if((PID=fork())==-1)
{
perror("\nfork2 error\n");
exit(1);
}
else if(PID==0) image_size();
close(PIPE1[0]);
close(PIPE1[1]);
}
void main()
{
char INPUT[20];
scanf("%s",INPUT);
xview(INPUT);
wc(INPUT);
}
В ВХОДЕ я должен поставить имя файла, который содержит изображение (image.png). imagelinux.png.gz Когда я запускаю это в терминале, программа показывает «xview malo»: нет такого файла или каталога и печатает размер изображения в байтах. Он не показывает изображение: C ПОМОЩЬ!
Если вы вводите 'xview' в командной строке, то он открывает xview? – immibis
, существует логическая ошибка между вызовом 'zlib' и следующей строкой, поскольку неясно, какой процесс запущен, и мы можем ожидать, что' zlib' вернется. – user3629249