Наклоняюсь 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
Возможность получать результат постоянно
Что такое разница между этими двумя.
Кроме того, если я завершаю 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.
В чем разница между этими двумя подходами, что мне не хватает?