хвост -1 файл1 >> файл2 без \n

Выполните первый вызов функции, чтобы уничтожить FIFO. Вам действительно все равно, если звонок потерпит неудачу или нет. Затем вызовитеmkfifo()(и обязательно проверьте возвращаемое значение, чтобы убедиться, что операция прошла успешно.

этот первый вызов будет unlink()Вот синтаксис:

#include <unistd.h>

   int unlink(const char *pathname);

Вот описание со страницы MAN:

unlink ()удаляет имя из файловой системы. Если бы это имя было последним ссылка на файл, и ни один процесс не открывает файл, файл удаляется и пространство, которое он использовал, становится доступным для повторного использования.

Если имя было последней ссылкой на файл, но какие-либо процессы все еще файл открыт, файл будет существовать до тех пор, пока последний файл дескриптор, ссылающийся на него, закрыт.

Если имя относится к символической ссылке, ссылка удаляется.

Если имя относится к сокету, FIFO или устройству, имя для него удалены, но процессы, у которых открыт объект, могут продолжать использовать Это.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ В случае успеха возвращается ноль. При ошибке возвращается -1, а errno установить соответствующим образом.

#include <sys/types.h>
#include <sys/stat.h>

   int mkfifo(const char *pathname, mode_t mode);

*ОПИСАНИЕ mkfifo ()создает специальный файл FIFO с именем pathname. режим указывает разрешения FIFO. Он изменяется с помощью umask процесса в обычный способ :права доступа к созданному файлу: (режим и ~umask ).

Специальный файл FIFO подобен каналу, за исключением того, что он создается в по-другому. Вместо того, чтобы быть анонимным каналом связи, специальный файл FIFO вводится в файловую систему вызовом mkfifo ().

После того как вы таким образом создали специальный файл FIFO, любой процесс может открыть его для чтения или записи точно так же, как и обычный файл. Тем не менее, он должен быть открыт с обоих концов одновременно, прежде чем вы сможете приступить к выполнению любых операций ввода или вывода на нем. Открытие FIFO для чтение обычно блокируется до тех пор, пока какой-либо другой процесс не откроет тот же FIFO для письма и наоборот. См. fifo (7 )для неблокирующей обработки Специальные файлы FIFO.*

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ В случае успеха mkfifo ()и mkfifoat ()возвращают 0. В случае ошибки -Возвращается 1 (, и в этом случае errno устанавливается соответствующим образом ).

1
03.05.2021, 18:18
1 ответ

tail -1 извлекает последнюю строку указанного файла, включая символ новой строки, которым завершается последняя строка. Вам нужно убрать этот символ новой строки.

Подстановка команды $(…)удаляет завершающие символы новой строки. Поэтому поместите вызовы tailв подстановку команд.

printf '%s,%s\n' "$(tail -n1 file1)" "$(tail -n1 file3)" >>file2

В зависимости от вашей оболочки и ваших данных echo "$(tail -n1 file1),$(tail -n1 file3)" >>file2может работать или не работать. Это гарантированно сработает, если первый столбец не начинается с -и ни один столбец не содержит обратную косую черту.

1
28.07.2021, 11:35

Теги

Похожие вопросы