Я пытаюсь написать клон кошки осуществлять С, у меня есть этот код:Чтение из стандартного ввода записи в стандартный вывод в C
#include <stdio.h>
#define BLOCK_SIZE 512
int main(int argc, const char *argv[])
{
if (argc == 1) { // copy stdin to stdout
char buffer[BLOCK_SIZE];
while(!feof(stdin)) {
size_t bytes = fread(buffer, BLOCK_SIZE, sizeof(char),stdin);
fwrite(buffer, bytes, sizeof(char),stdout);
}
}
else printf("Not implemented.\n");
return 0;
}
я попробовал echo "1..2..3.." | ./cat
и ./cat < garbage.txt
, но я не вижу какой-либо вывод на терминале , Что я здесь делаю неправильно?
Редактировать: Согласно комментариям и ответам, я заканчивал делать это:
void copy_stdin2stdout()
{
char buffer[BLOCK_SIZE];
for(;;) {
size_t bytes = fread(buffer, sizeof(char),BLOCK_SIZE,stdin);
fwrite(buffer, sizeof(char), bytes, stdout);
fflush(stdout);
if (bytes < BLOCK_SIZE)
if (feof(stdin))
break;
}
}
Не используйте 'feof' как условие цикла; он не вернет true до тех пор, пока * после * вы не попытаетесь прочитать за конец файла, поэтому ваш цикл может выполняться слишком часто. Проверьте результат 'fread' вместо этого, и если он меньше BLOCK_SIZE, * затем * вызовите' feof', чтобы проверить конец файла. И вам нужно добавить 'fflush (stdout);' после вызова 'fwrite'. –
здесь fread() почти всегда возвращает нулевые байты, если вы не набрали ровно 512 символов. –
@JohnBode Как выглядит мой редактор? – yasar