в чем разница между tail -f и cat в c и bash при чтении значения из трубы - PullRequest
2 голосов
/ 01 августа 2020

Наклоняюсь c программа. И у меня есть программа, показанная ниже.

в testpipe. c

#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<fcntl.h>

const char *fifo ="/tmp/test";

int main(){
 int fd = open(fifo, o_wronly);
 char *text ="hello this is the text";
 while(1){
   write(fd,text,strlen(text));
 }
 return 0;
}

Я создал канал в bash, используя команду ниже

mkfifo /tmp/test

, затем выполнить

./testpipe

программа будет запущена и будет записывать в канал / tmp / test

теперь в другом терминале

если я наберу

tail -f /tmp/test

Я не нашел никакого результата

Но я попытался сделать

cat /tmp/test

Возможность получать результат постоянно

  1. Что такое разница между этими двумя.

  2. Кроме того, если я завершаю cat / tmp / test, он убивает ./testpipe, почему?

Я попытался поэкспериментировать с приведенным выше случаем, используя bash. Но результат был другим. Первый терминал, который я пробовал, например

mkfifo /tmp/test

while true; do
 echo $(date) >/tmp/test
done

Второй терминал

Когда я набираю

 cat /tmp/test 

, я получаю вывод не постоянно.

Но когда я пытаюсь

tail -f /tmp/test

Постоянно получаю вывод. Если я попытаюсь прикончить хвост или кошку, это не убьет пока l oop.

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