我是Linux(Ubuntu)的新手,我必须在C中做一个必须解压缩图像,打印图像大小并显示图像的代码。 我必须使用zcat,wc(wc -c)和xview(xview stdin)。 这是我的代码:
#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);
}
在INPUT中,我必须输入包含图像的文件名(image.png)。 imagelinux.png.gz 当我在终端中运行它时程序显示“xview malo”:没有这样的文件或目录 并以字节为单位打印图像大小。 它没有显示图像:C 帮助!
答案 0 :(得分:0)
使用sudo apt-get install xloadimage
安装xview,您的程序将正常运行。