2015-12-09 6 views
1

Я новичок в 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 ПОМОЩЬ!

+1

Если вы вводите 'xview' в командной строке, то он открывает xview? – immibis

+0

, существует логическая ошибка между вызовом 'zlib' и следующей строкой, поскольку неясно, какой процесс запущен, и мы можем ожидать, что' zlib' вернется. – user3629249

ответ

0

Установите xview с sudo apt-get install xloadimage и ваша программа будет работать.

+0

спасибо !!!!!!!!!! –

Смежные вопросы