前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux知识之启动外部应用方法

Linux知识之启动外部应用方法

作者头像
Qt君
发布2019-07-16 14:12:58
6070
发布2019-07-16 14:12:58
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

一般启动外部应用的方法有system,exec与popen。它们功能相似但使用上有所差别。

1. system

代码语言:javascript
复制
#include <stdlib.h>
int system(const char *command);

(1) 此方法简单易用;

(2) 但新进程会忽略SIGINT和SIGQUIT信号;

(3) 返回值较多,容易与command的返回值混淆。

(4) 示例:

代码语言:javascript
复制
#include <stdlib.h>

int main(int argc, char *argv[])
{
    system("ls");

    return ;
}

2. exec族函数

代码语言:javascript
复制
#include <unistd.h>
extern char **environ;
int execl(const char *path, const char *arg, ... /* (char *)NULL */);
int execlp(const char *file, const char *arg, ... /* (char *)NULL */);
int execle(const char *path, const char *arg, ... /* (char *)NULL, char * const envp[] */);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);

(1) 它会启用新进程,取代父进程(除调用exec失败外);

(2) 可以使用父进程的上下文;

(3) 示例:

代码语言:javascript
复制
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    // 执行/bin目录下的ls, 第二个参数为程序名ls, 最后一个参数为占位必须NULL
    execl("/bin/ls", "ls", NULL);
    printf("============"); //execl执行成功则不会再执行该语句

    return ;
}

3. popen管道

代码语言:javascript
复制
#include <stdio.h>
FILE * popen(const char *command, const char *type);

(1) type为读写模式;

(2) popen调用成功返回FILE指针,失败返回NULL;

(3) 示例:

代码语言:javascript
复制
#include <stdio.h>

int main(int argc, char *argv[])
{
    FILE *fp = NULL;
    fp = popen("ls", "w");
    if(fp == NULL) {
        return -1;
    }
    pclose(fp);

    return ;
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档