Как изменить этот код для записи в stdout? - PullRequest
0 голосов
/ 19 марта 2012

Я пытаюсь изменить это для печати на экране терминала вместо файла.Поэтому я пытаюсь распечатать на стандартный вывод.

char    buf;    
int s, n;       
char filename[LINELEN];
char *recfile = "recfile.txt";
FILE *finp;

fflush(NULL);
while(buf != EOF)
{
    fflush(finp);
    if (read(s, &buf, 1) < 0) {
        printf("\terror in recieving file\n");
    }
    if(buf != EOF)
    (void) fputc(buf, finp);
}
fclose(finp);
close(s);

Я пытался внести это изменение.

finp = freopen("/dev/null","w+", stdout); 

Все в linux - это файл, верно?Так почему же это не сработало?

Ответы [ 3 ]

2 голосов
/ 19 марта 2012

Разве это не должно быть fputc(buf, stdout);?

1 голос
/ 19 марта 2012

Вы открываете /dev/null и перенаправляете на него стандартный вывод, но запись символа в /dev/null игнорирует его. freopen () в этом случае перенаправляет stdout в файл /dev/null.

0 голосов
/ 19 марта 2012

Есть несколько других проблем с этой программой.

Чтение файла с использованием:

if (read(s, &buf, 1) < 0) ...

не помещает значение EOF в buf, поэтому

if(buf != EOF)

и

while(buf != EOF)

не прекратит работу, когда достигнет конца файла.

если buf получает введенное в него значение символа 0xFF, тогда это значение будет расширено знаком и будет принято за EOF.

read сигнализирует конец файла, возвращая 0.

s не инициализирован должным образом, поэтому он может быть непредсказуемым при чтении файлового дескриптора.

...