Я написал код для практики использования трубы и встретил некоторые проблемы.Может ли текстовый файл использоваться как труба?
Для кода ниже я попытался сделать именованный канал для записи/чтения. Но если в моем текстовом файле есть несколько слов, мой код не работает. Я ожидал, что на выходе будут напечатаны слова внутри текстового файла и строка, в которую я написал. Не могу ли я использовать файл .txt в качестве канала? Как использовать трубку для изменения текстового файла? Спасибо за помощь!
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#define MAX 100
int main()
{
int fd;
char *myfifo = "pipe_tx2.txt";
char buf[MAX];
/* create the fifo */
mkfifo(myfifo, 666);
/* write string to the pipe */
fd = open(myfifo, O_WRONLY);
write(fd, "hello", sizeof("hello"));
close(fd);
/* read and display message from pipe */
fd = open(myfifo, O_RDONLY);
read(fd, buf, MAX);
printf("we got: %s\n", buf);
close(fd);
/* remove the pipe */
unlink(myfifo);
return 0;
}
Вы не проверяете возвращаемое значение из 'mkfifo()', 'write()' или 'read()'. Поэтому вы не знаете, что работает, а что нет. Вы даже не знаете, успешно ли ваши вызовы 'open()' или нет. –
хорошо, спасибо за помощь! – KennyYang
Я не уверен, что понимаю, что вы подразумеваете под «если в моем текстовом файле есть несколько слов, мой код не работает». Вы говорите, что у вас есть обычный файл с тем же именем, что и FIFO, который вы пытаетесь создать? Если так, то нет, это абсолютно не сработает. FIFO - это особый * вид * файла, а не специальный * use * для файла. –