C语言调用system小结

在C语言中使用system()

  #include 
   int system(const char *command);

system() ignores SIGINT and SIGQUIT. This may make programs that call it from a loop uninterruptible, unless they take care themselves to check the exit sta‐tus of the child. E.g.

while (something) {
               int ret = system("foo");

               if (WIFSIGNALED(ret) &&
                   (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
                       break;
           }

执行system()会等待调用的子程序结束,才执行后续的代码。

【验证步骤】

  1. 创建子程序
  • syscall.c
#include 


int main()
{

    int cnt = 0;
    
    while(++cnt < 20)
    {
        sleep(1);
        printf("loop:%d\n",cnt);
    }
}
  • 编译 gcc syscall.c -o syscall ; 生成可执行程序 syscall
  1. 创建测试主程序
  • test.c
int main()
{
    printf("enter:main\n");
    system("./syscall");
    printf("leave:main\n");    

    return 0;
}
  • 编译 gcc test.c ; 生成可执行程序 a.out
  1. 运行主程序看验证结果
./a.out 
enter:main
loop:1
loop:2
loop:3
loop:4
loop:5
loop:6
loop:7
loop:8
loop:9
loop:10
loop:11
loop:12
loop:13
loop:14
loop:15
loop:16
loop:17
loop:18
loop:19
leave:main

【可以看出程序是顺序执行的, 后续我们再来验证popen()方式】

你可能感兴趣的:(C语言调用system小结)