Как вызывать из моей программы на c, как передать данные в исполняемый файл zlib zlib, который использует stdin/stdout?
У меня есть программное приложение c, которое может генерировать файл, содержащий сжатые данные, которые затем преобразуются в формат zlib путем добавления необходимых верхних и нижних колонтитулов zlib. Я хочу убедиться, что данные были сжаты правильно, вызвав из моего приложения исполняемый файл zlib zlib.
Чтобы вызвать zpipe непосредственно из командной строки linux, используется следующий синтаксис: использование zpipe: zpipe [-d]
Мое приложение имеет свою основную функцию. Изначально я смог встроить исходный код zpipe в свое приложение и включить необходимый код из основной функции zpipe в основную функцию моего приложения, таким образом вызывая функции zpipe inflate и deflate напрямую.
Вместо того чтобы включать сам исходный код zpipe, я теперь вместо этого хочу вызвать сам исполняемый файл zpipe из основной функции моего приложения.
Я вызываю основную функцию моего собственного приложения из командной строки Linux следующим образом: ./myapp ./zpipe -d -i zlib_format_input_compressed_file -o output_decompressed_file
Я могу вызвать исполняемый файл zpipe из моего приложения, создав newargv, однако эта операция будет безуспешной, пока я не получу zpipe для распаковки данных файла, которые я ему предоставляю.
char *newargv[] = {argv[1], argv[2]}; // for zpipe, argc = 2
if (0 == (my_pid = fork())) {
if (-1 == execve(argv[1], newargv, NULL)) {
perror("child process execve failed [%m]");
return -1;
}
}
Проблема в том, как передать содержимое zlib_format_input_compressed_file в stdin zpipe из моей программы на c, как это было сделано из оболочки командной строки, и указать zpipe направить результат в output_decompressed_file. Могу ли я использовать "трубу" для достижения этой цели?
1 ответ
Я нашел этот пример, который в принципе, вероятно, составляет основу того, что я пытаюсь сделать. Нужно создать две трубы. https://jineshkj.wordpress.com/2006/12/22/how-to-capture-stdin-stdout-and-stderr-of-child-program/