Как вывести перед каждой строкой дополнительную строку?
Есть файл в котором хранится информация о дистрибутиве. Я читаю данный файл и сохраняю в небольшой буфер. Выглядит это так:
char tmpf_buffer[124];
nb = read(fd, tmpf_buffer, sizeof(tmpf_buffer));
/* Внутри -> Manjaro Linux\n20.0.30\nLysia\n */
После вывода содержимого в stdout получаю такую информацию:
Manjaro Linux
20.0.3
Lysia
Как перед каждой строкой вывести другую строку?
Например:
Название: Manjaro Linux
Релиз: 20.0.3
Кодовое слово: Lysia
Пробовал использовать высокоуровневые конструкции ввода-вывода, файловый дескриптор конвертировал в файловый поток, читал файл с помощью fgets, например так:
tmpf_stream = fdopen(fd, "r");
char *col_names[] = {"Название:", "Релиз:", "Кодовое слов:"};
while (fgets(tmpf_buffer, sizeof(tmpf_buffer), tmpf_stream)) {
printf("%s %s", col_names[index++], tmpf_buffer);
И тогда вывод будет правильным, но это решение не подходит для моей программы, ибо вывод информации осуществляет отдельная функция. Подходит решение с read, сохраняю информацию в буфер с \n, а затем в конце другой программы осуществляю printf. Но как вывести данный буфер с дополнительной информацией?
Еще пытался сделать таким образом:
char *col_names[] = {"Название дистрибутива:", "Релиз:", "Кодовое название:"};
for (int i = 0; i < 3; i++) {
printf("%s %s\n", col_names[i], tmpf_buffer);
}
Но в выводе будет:
Название дистрибутива: Manjaro Linux
20.0.3
Lysia
Релиз: Manjaro Linux
20.0.3
Lysia
Кодовое название: Manjaro Linux
20.0.3
Lysia
Как этого избежать?
Ответы (1 шт):
Ну, например, навскидку - так:
void out(const char * buf)
{
const char *col_names[] = {
"Название дистрибутива:",
"Релиз:", "Кодовое название:"
};
for(int pre = 1, i = 0; *buf; buf++)
{
if (pre) { printf("%s ",col_names[i++]); pre = 0; }
if (*buf == '\n') pre = 1;
putchar(*buf);
}
}
int main()
{
out("Manjaro Linux\n20.0.30\nLysia\n");
}
Как видите, в out передается весь буфер. Можно воспользоваться strtok, но содержимое буфера при этом меняется...