Linux中C语言执行shell脚本的方法

主要有三种方法:exec函数簇,system函数以及popen函数,其中需要注意的是,exec函数簇的函数执行成功后是无返回的,一般需要和fork()函数同时使用。在使用时需要另外的fork一个进程。 popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程。这个进程必须由 pclose() 函数关闭,而不是 fclose() 函数。

exec函数簇:

函数原型:

#include 

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[]);

使用如下: 

  7     char *const argv[] = {"ls", "-al", "NULL"};
  8     char *const envp[] = {"PATH=/bin:/usr/bin", NULL};
  9     
 10     execl("/bin/ls", "ls", "-al", (char*)NULL);
 11     
 12     execv("/bin/ls", argv);
 13     
 14     execle("/bin/ls", "ls", "-al", (char*)NULL, envp);
 15     
 16     execve("/bin/ls", argv, envp);
 17     
 18     execlp("ls", "ls", "-al", (char*)NULL);
 19     
 20     execvp("ls", argv);

 

 

system函数:

函数原型:

#include 

int system(const char *command);

直接将需要执行的命令或者shell脚本放入其中即可:如,

system("/etc/xxx.sh");
system("ls -al /etc/");


popen函数:

FILE * popen ( const char * command , const char * type );

int pclose ( FILE * stream );

如:

#include
#define _LINE_LENGTH 300
int main(void) 
{
    FILE *file;
    char line[_LINE_LENGTH];
    file = popen("ls", "r");
    if (NULL != file)
    {
        while (fgets(line, _LINE_LENGTH, file) != NULL)
        {
            printf("line=%s\n", line);
        }
    }
    else
    {
        return 1;
    }
    pclose(file);
    return 0;
}

 

你可能感兴趣的:(linux系统编程,shell,linux系统)