终止c函数

时间:2014-02-17 14:42:59

标签: c ffmpeg system-calls terminate

我想在c中创建一个函数,它将在Linux下捕获视频。我在我的c程序中通过ffmpeg嵌入system()命令,该程序捕获视频。 {[1}}按[q]终止。如何在我的c程序中包含终止。

此函数是server.c程序的一部分。当客户端请求终止时,我希望视频cature功能终止。这可能吗?

ffmpeg

1 个答案:

答案 0 :(得分:1)

正如你问fork的示例,exec,kill这里是可能的解决方案。 avconv替换了我的电脑上的ffmpeg。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <errno.h>
#include <assert.h>
#include <unistd.h>
#include <sched.h>
#include <sys/wait.h>

pid_t parent_pid;

void sigquit_handler (int sig)
{
    assert(sig == SIGKILL);
    pid_t self = getpid();
    if (parent_pid != self)
    {
        printf("recording done");
        _exit(0);
    }
}

int main()
{
    int pid = 0;
    int status;
    pid_t child;

    signal(SIGKILL, sigquit_handler);
    parent_pid = getpid();

    pid = fork();

    if ( pid == 0)
    {
        execl("/usr/bin/avconv","avconv","-f","video4linux2","-r","25","-s","640x480","-i","/dev/video0","out.avi",(char*)0);
    }
    else if( pid > 0)
    {
        sleep(5);
        kill(pid, SIGKILL);

        child = wait(&status);
        printf("child %d succesully quit\n", (int)child);
    }
    return 0;
}