如何用 C 语言编写使用 stdin 和 stdout 的 BASH 命令

问题描述 投票:0回答:1

我想编写一个程序,在其中编译 C 程序,并将其保存在 BASH 识别程序的位置(/usr/bin 或其他地方)。

对于使用,我想在终端中运行

$ c_programme <file_input> | <programme_to_pipe_stdout>

我可以看到,通过 popen() 函数,我可以使用 ffmpeg 来处理视频:

FILE *pipein = popen("ffmpeg -i teapot.mp4 -f image2pipe -vcodec rawvideo -pix_fmt rgb24 -", "r");
FILE *pipeout = popen("ffmpeg -y -f rawvideo -vcodec rawvideo -pix_fmt rgb24 -s 1280x720 -r 25 -i - -f mp4 -q:v 50 -an -vcodec mpeg4 output.mp4", "w");

但是上面的teapot.mp4已经在代码中指定了,在BASH中运行程序时并没有输入到C程序中。如何在 C 代码中创建一个从 shell 读取的变量?

同样,我不想输出到文件,我只想输出到stdout,这样我就可以通过管道传输它。我该怎么做?

谢谢!

pipe c stdout stdin
1个回答
0
投票

如何在 C 代码中创建一个从 shell 读取的变量?

C 程序可以通过将

main
声明为
int main(int argc, char *argv[])
来获取在命令行上传递给它的参数,其中
argv[0]
指的是程序名称,
argv[1]
是第一个参数,
argv[2]
是第一个参数。第二个,依此类推,直到
argv[argc-1]
。结束也由
argv[argc]
表示为空指针。

例如这个程序的输出:

#include <stdio.h>


int main(int argc, char *argv[])
{
    for (int i = 0; i < argc; ++i)
        printf("argv[%d] = %s.\n", i, argv[i]);
}

当执行为

foo Argument1 Argument2
时是:

argv[0] = foo.
argv[1] = 参数 1。
argv[2] = 参数 2。

同样,我不想输出到文件,我只想输出到stdout,这样我就可以通过管道传输它。我该怎么做?

使用

printf
puts
putchar

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.