• linux环境 c 中如何执行shell命令


    1

    system 相当简单:

    int system(const char *command);

     system("ps -aux");

    2 popen

    popen有两个参数,第一个是命令,2是打开流的方式; 返回一个文件流——popen:让进程看起来像文件  http://www.cnblogs.com/RichardLee/articles/2371765.html

    区别:

    linux下通过C执行命令的时候一半都是使用system()方法,但是该方法执行命令返回的值是-1或0,而有时候我们需要得到执行命令后的结果。可以使用管道实现

    输出到文件流的函数是popen()

    3 exerse  可以在一个进程插入另外一个进程执行,但是又不像fork()一样产生一个子进程,execve()插入的进程和原进程共享进程号,就好像执行这进程就像执行过程调用一般随意

    int execve(const char *filename, char *const argv[], char *const envp[]);    1 要执行的文件名   2 参数    3 环境变量

    execve 这种方式有些特别,必须传人一个shell脚本文件(这个文件第一行必须是#!/bin/bash)。。

    char *newargv[] = { "/opt/software/lktest/c" };
    char *newenviron[] = { NULL };
    execve("/bin/ls" , newargv, newenviron);      --- 如果是系统命令,需要其完整路径、不然没有输出———— 也不报错!

    ./execve.o ./execve_sscrs.sh
    ./execve.o execve_sscrs.sh

    两种方式都是可行的。

    4
    execl  跟exerse类似
    extern int execl(_const char *_path,const char *_argv[],...,NULL)
    简单解释:函数execl()返回值定义为整形,如果执行成功将不返回!执行失败返回-1。
                      参数列表中char *_path为所要执行的文件的绝对路径,从第二个参数argv开始为执行新的文件所需的参数,最后一个参数必须是控指针(我为了简便用NULL代替)。

    此时最好引入#include <unistd.h>, 否则有警告。
     execl("/usr/bin/sh", "sh", "-c","ls ~", 0);
  • 相关阅读:
    java代码 分解EXCEL(一)
    hdu 1226 BFS + bfs记录路径
    MVC-MODEL
    弱类型、强类型、动态类型、静态类型语言的区别是什么?
    Objective-C中的命名前缀说明
    self & this 上下文
    Object comparison
    Dynamic typing 动态类型
    iOS支付宝 9.x 版本首页效果
    Using an Image for the Layer’s Content
  • 原文地址:https://www.cnblogs.com/FlyAway2013/p/3625107.html
Copyright © 2020-2023  润新知