Как скопировать содержимое файла в другой файл при помощи именованного канала FIFO?
Не могу понять, как реализовать копирование содержимого файла посредством именованного канала. Написал программу , которая создает канал и в дальнейшем выводит строку в консоль.Но, этого мало.Нужно непосредственное взаимодействие между файлами их содержимым.Не понимаю как это реализовать.
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#define FIFO_NAME "myfifo"
int main (int argc, char ** argv)
{
int fifo;
if (argc < 2) {
fprintf (stderr, "Too few arguments\n");
return 1;
}
fifo = open (FIFO_NAME, O_WRONLY);
if (fifo == -1) {
fprintf (stderr, "Cannot open fifo\n");
return 1;
}
if (write (fifo, argv[1], strlen (argv[1])) == -1) {
fprintf (stderr, "write() error\n");
return 1;
}
close (fifo);
return 0;
}
Этот пример кода сервера именованного канала.Думал о том, чтоб добавить где-то в окнец кода пару функций типа open read write для получения дескриптора и в дальнейшем считывания содержимого.Но,куда их именно пихать??? есть так же еще и клиентская сторона :
#include <stdio.h>
#include <sys/stat.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#define FIFO_NAME "myfifo"
#define BUF_SIZE 512
int main (void)
{
FILE * fifo;
char * buf;
if (mkfifo ("myfifo", 0640) == -1) {
fprintf (stderr, "Can't create fifo\n");
return 1;
}
fifo = fopen (FIFO_NAME, "r");
if (fifo == NULL) {
fprintf (stderr, "Cannot open fifo\n");
return 1;
}
buf = (char *) malloc (BUF_SIZE);
if (buf == NULL) {
fprintf (stderr, "malloc () error\n");
return 1;
}
fscanf (fifo, "%s", buf);
printf ("%s\n", buf);
fclose (fifo);
free (buf);
unlink (FIFO_NAME);
return 0;
}
Опять же, я прекрасно понимаю, как реализовать копирование содержимого файла в другой посредством тех же системных вызовов ну или библиотечных, но, в случае системных вызовов, приходится испольозовать буфер обмена.Здесь же именованный канал.Если я буду так же добавлять функции открытия чтения и записи, то придется испольозовать буфер.Но, по логике вещей, если у тебя есть канал, зачем тебе буфер(исправбье меня пж, если не прав).Я так понимаю именованный канал выступает неким буфером обмена между процессами что ли.Тогда как его испольозвать при копировании содержимого в другой файл??? Объясните ,пожалуйста.