2016-10-19 6 views
0

Мне нужно использовать пример кода, в котором я должен указать имя источника файла и имя целевого файла. Тогда это имя будет отправить на другой функции, как показано в коде нижеИспользование Stdin и Stdout

int def(FILE *source, FILE *dest, int level) 
    { 
     ---- 
     ----- 

     return Z_OK; 
    } 



    int main(int argc, char **argv) 
    { 
     int ret; 

     /* avoid end-of-line conversions */ 
     SET_BINARY_MODE(stdin); 
     SET_BINARY_MODE(stdout); 

     // do compression if no arguments 
     if (argc == 1) 
     { 
      ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION); 
      if (ret != Z_OK) 
      { 
       zerr(ret); 
       return ret; 
      } 
       // otherwise, report usage 
      else 
      { 
       fputs("zpipe usage: zpipe [-d] <source> dest\n", stderr); 
       return 1; 
      } 
     } 

     return 0; 
    } 

Я не undertsnad, как STDIN и STDOUT проходят имена входных и выходных файлов. Кроме того, я не могу предоставить правильную последовательность имен файлов источника и назначения в качестве аргументов команды. Большую часть времени я получаю zpipe usage: zpipe [-d] <source> dest.

UPDATE: Полный пример кода присутствует в this link

ответ

0

При использовании stdin и stdout, имена файлов не передаются. Эти файлы уже открыты, когда вызывается main, и программа может просто читать/записывать их. Родительский процесс (обычно оболочка) затем берет на себя обработку данных до stdin и делает что-то с данными от stdout программы.

В вашем примере использования zpipe <sourcefile> destinationfile, оболочка открывает Исходный_файл для чтения, и дает открытый файл zpipe, а также создает destinationfile для записи, и записывает в ней все программные мероприятия его stdout. Программа zpipe не получает имя ни одного файла, она просто получает открытые файлы.

Кроме того, < sourcefile и > destinationfile не являются аргументами для zpipe. Shell анализирует и обрабатывает их, как описано выше, zpipe не получает их в качестве аргументов.

+0

спасибо, но какие файлы открыты? Как мне сказать, какой файл я хочу передать, и где я хочу получить результат? – user2756695

+0

'>' используется для перенаправления 'stdout', т.е. выход stdout программы переходит к любому файлу, который вы ставите после него. И '<' используется для перенаправления 'stdin', независимо от того, что программа читает, поступает из файла после него. (Немного больше: есть также pipe '|', который используется между двумя процессами, и он действует как '>' для программы с левой стороны и как '' 'для программы с правой стороны.). Из программы вы не можете (легко) указать, куда идет выход или куда входит вход, вы просто читаете/пишете. – hyde

+0

Есть ли способ, которым я могу предоставить свой собственный исходный файл и сохранить результаты в файле destinationo? Я имею в виду, какую модификацию я должен сделать, чтобы получить исходный файл? – user2756695