C 使用系统命令

C 使用系统命令,c,C,我正在使用以下系统命令调用ffmpeg im my c程序: system("ffmpeg -t 10 -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -f mp4 /home/somepath/webcam.mp4"); system("ffmpeg -i /home/somepath/webcam.mp4 -r 1 -s 640x480 -f image2 foo-%03d.jpeg"); 问题是我需要在10秒后第一个系统完成后才调用第二个系

我正在使用以下系统命令调用ffmpeg im my c程序:

system("ffmpeg -t 10 -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -f mp4 /home/somepath/webcam.mp4");
system("ffmpeg -i /home/somepath/webcam.mp4 -r 1 -s 640x480 -f image2 foo-%03d.jpeg");

问题是我需要在10秒后第一个系统完成后才调用第二个系统。我能想到的唯一方法是使用thread.sleep()然后调用它。有没有其他更优雅的方法可以达到同样的效果?

您可能可以将所有命令写入bat文件或shell脚本,并调用bat文件或shell脚本。

阅读一本类似或的好书

您将了解到,基本的流程创建和程序执行是相关的

实际上,
system(3)
是由
fork
然后
/bin/sh
execve
-c
然后是
waitpid
wait
实现的

你完全可以自己做
fork
execve
。您可能还需要处理该信号。您不需要任何与线程相关的调用。您可能对、、系统调用等感兴趣

我不明白如果第一个
ffmpeg
进程超过10秒,你想做什么。你想去吗?(然后先用
SIGTERM
杀死,然后用
SIGQUIT
杀死,最后用
SIGKILL

如果您正在编写一个图形程序,大多数工具包都会提供过程处理功能(因为它与事件循环混合在一起)。用GTK考虑使用和。Qt有一个
QProcess
类。

引用自

int系统(常量字符*命令)

执行系统命令

调用命令处理器以执行命令。一旦命令执行终止,处理器将控制权交还给程序,返回一个int值,其解释取决于系统


我认为
系统
被阻塞了。所以你不需要睡眠,我认为睡眠是一个很好的方法,不需要其他的解决方案。system()不是一个阻塞函数调用吗?在我看来,你有一个非常简单的解决方案。到目前为止的另一个想法是——使用bat文件意味着另一种可能需要调试的代码。system是一个阻塞调用,所以您所做的这两个调用都可以。但是,如果您确实需要两次调用之间的间隔为“10”秒,那么“睡眠”将是最简单的。
system
不是一个命令(如
ls
sh
),而是一个构建在syscalls之上的函数,请参见我的答案。像您这样在
系统中使用
%d
是错误的。