我想编写一个程序,在其中编译 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,这样我就可以通过管道传输它。我该怎么做?
谢谢!
如何在 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
。