2016-11-07 2 views
1

Я пишу два файла c, которые нужно написать (по stdout), а другой читается (по stdin).Запись на stdout и чтение из stdin в C

Но прочитанный код всегда зависает с read(), я пробовал функцию fread, но бесполезен.

Может кто-нибудь дать совет?

Написать пример:

int main() { 
    char *a_string="Hello"; 
    write(fileno(stdout), a_string, strlen(a_string)+1); 

    return 0; 
} 

Читайте пример:

int main() { 
    char buffer[100]; 
    read(fileno(stdin), buffer, 100-1); 
    printf("buffer=%s\n", buffer); 

    return 0; 
} 
+0

Взгляните на [fgets] (https://www.tutorialspoint.com/c_standard_library/c_function_fgets.htm) – LPs

+0

Обычно ваш код будет зависать, пока вы не нажмете клавишу Enter. И, кроме того, ваша строка не будет нулевой. Используйте «fgets» для чтения и «fputs» для записи. –

+0

По какой-то причине я хочу использовать только функции read() и write(). –

ответ

0

Код чтения всегда зависает с read(), я пробовал функцию fread, но бесполезен.

Это происходит потому, что read и fread, в отличие от fgets и подобных функций, не бросайте читать, когда пользователь вводит символ новой строки (прижимает Enter). Он ожидает, пока EOF не будет прочитан или пока не будут прочитаны указанные байты.

Для отправки EOF на номер read необходимо нажать Ctrl + D.

0

Вы должны ввести EOF остановиться, в Linux, это Ctrl + D.

+0

В linux, stdin и stdout являются неназванными трубами. Когда вы закрываете все дескрипторы записи для канала, он отправляет EOF в дескриптор чтения этого канала. – nopasara

+0

@nopasara Я не вижу, как это особенно актуально. –

+0

@MD XF, может быть, нет, хотя он соединял две программы вместе. Что для первой программы написано? – nopasara

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