c - 使用系统命令

标签 c

我正在使用以下系统命令在我的 C 程序中调用 ffmpeg:

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() 然后调用它。还有其他更优雅的方法可以实现相同的效果吗?

最佳答案

读一本好书,比如advanced linux programmingadvanced unix programming .

您将了解到基本的流程创建和程序执行与 fork(2) 相关。 , execve(2) , waitpid(2)及相关syscalls .

实际上,system(3)是通过/bin/shfork然后execve-c 然后是 waitpidwait

您绝对可以自己执行forkexecve。您可能还想处理 SIGCHLD信号。您不需要任何与线程相关的调用。您可能对pipe(2)感兴趣, dup2(2) , poll(2) , sigaction(2) , pause(2) , nanosleep(2)系统调用等

我不明白如果第一个 ffmpeg 进程超过十秒,您想对它做什么。你想要kill(2)它 ? (然后首先使用 SIGTERM 终止,然后使用 SIGQUIT,最后使用 SIGKILL)。

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

关于c - 使用系统命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11699042/

相关文章:

c - 如何在 C 中使用指针打印带有结构的变量?

c++ -++operator 在这个 void uart_puts(unsigned char * t) { while(*t) uart_putch(*t++) 中做了什么?

c - 从索引 1 到字符串末尾的子字符串

c - 将 XOR 作为宏实现,但未按预期工作

c - 可执行文件之间有什么区别?

竞技编程: "Time exceeded error"

c - 我无法理解 for 循环 block 和 if 语句

c - 当由多个线程执行时,我应该同步 mq_timedreceive 调用吗?

C 计算错误

c - 如何使用动态内存分配处理 C 中的矩阵?