Использовать массив символов как поток файлов - PullRequest
0 голосов
/ 02 октября 2018

Как использовать массив char для хранения данных для потока FILE?

char buffer[max_len];
FILE *fp = fopen(<I want to use data in buffer variable as file data>, "r");

Цель состоит в том, чтобы данные были готовы в fp для следующего поведения:

execl("/bin/cat", "cat",  fp, (char *)NULL);

Кроме того, при использовании fmemopen (как предлагается):

char buf[] = "hello";

FILE *fp = fmemopen(buf, strlen(buf), "w");
execl("/usr/bin/echo", "echo",  fp, (char *)NULL);

Я получаю искаженный вывод ..

1 Ответ

0 голосов
/ 02 октября 2018

Если вы используете C и библиотеку GNU C или любую POSIX-совместимую реализацию, вы можете использовать fmemopen , который работает точно так, как вы ожидаете.

Если вы хотите сделать это вPortable ISO C, fmemopen, к сожалению, недоступен.

Тем не менее, есть примеры библиотек, которые делают это переносимым способом, например.https://github.com/Snaipe/fmem.

При этом используется функция funopen , которая позволяет связывать потоковые операции с пользовательскими функциями.

Если вы ориентируетесь на Windows, ситуация немного большесложный, с некоторыми соображениями, найденными в этом ответе: https://stackoverflow.com/a/50087392/393701.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...