Проблемы с C программой, которая копирует команду `cat` - PullRequest
1 голос
/ 15 апреля 2020

Я создал C программу, которая делает то же, что и команда cat, но столкнулся с проблемой. Теперь это хорошо работает при добавлении нескольких файлов в качестве входных данных. Теперь он не показывает, что было прочитано в stdin, когда я не помещаю файл в качестве параметра. Как я могу это исправить?

#include<stdio.h>
#include<fcntl.h>
#include<stdarg.h>
#include<stdlib.h>
#include    "ourhdr.h"
#define BUFFSIZE    8192
int main(int argc,char *argv[])
{
    int fd;
    int n;
    char* index=argv[0];
    char buf[BUFFSIZE];
    if(argc ==1)
    {
        printf("<sintaxa> fisier1 fisier2....\n");
    }
    else
        while(--argc>0)
        {
            if((fd = open(*++argv,O_RDONLY)) == -1)
            {
                printf("%s: %s: No such file or directory\n",index,*argv);
            }
            else
            {
                while((n=read(fd,buf,BUFFSIZE)) > 0)
                    if(write(STDOUT_FILENO,buf,n) != n)
                    {
                        err_sys("write error");
                    }

                if(n<0)
                {
                    err_sys("read error");
                }
                close(fd);
            }
        }

    return 0;
}

1 Ответ

1 голос
/ 15 апреля 2020

Используйте источник, Люк . Реализация NetBSD cat. c (см. Функцию raw_args) начинается с инициализации локальной переменной в stdin. Затем он безоговорочно входит в argv l oop. Если *argv равно NULL, локальная переменная все еще установлена, и она читает из стандартного ввода. Иначе он перезаписывается для каждого элемента argv.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...