system函数(fork,execlp)

转载 2012年03月28日 10:36:43
system 函数和有同等机能的函数(mysystem)的示例。
execlp(execvp,..)函数一实行参数的命令和指定参数就将执行,但是执行后,相应程序将终止。
如果想在其执行后,仍继续进行程序处理动作,就要通过fork生成子进程,在那个子进程内执行execlp等命令。execlp函数执行结束后,即使子进程终了后,其父进程仍然能够继续执行相应处理。
execlp 函数中,用通常的shell执行pipe和Redirection处理( |  etc.)和通过正规表现(? * etc.)不能进行复杂的处理.如要进行复杂的处理,通过shell command(/bin/sh etc.)来执行. 例:
  execlp("/bin/sh","/bin/sh","-c","ls | wc > output.txt",NULL);
例如,mysystem()函数的执行例和根据mysystem()函数的执行结果(exit status)发生分歧处理的例子。
system函数(fork,execlp)(list_76.c)
#include stdio.h>
#include stdlib.h>
#include sys/types.h>
#include sys/wait.h>
int mysystem(char* cmd)
{
    int child,status;
    if ((child = fork())  0) {
        perror("fork");
        return EXIT_FAILURE;
    }
    if(child == 0){
        execlp("/bin/sh","/bin/sh","-c",cmd,NULL);
        return EXIT_FAILURE;
    } else {
        if(wait(&status)  0) {
            perror("wait");
            exit(1);
        }
    }
    return status;
}
int main(int argc,char* argv[])
{
    int status;
    char cmd[256];
    if(argc  4) {
        printf("usage: %s \"test-rule\" \"true command\" \"false command\"\n",argv[0]);
        return 0;
    }
    printf("**test of mysystem\n");
    mysystem("cat list_76.c | wc");
   
    printf("**execute shell rule\n");
    sprintf(cmd,"test %s;",argv[1]);
    status = mysystem(cmd);
    if(status) mysystem(argv[3]);
    else mysystem(argv[2]);
   
    return 0;
}


执行结果

Gami[178]% ./list_76.exe
usage: ./list_76.exe "test-rule" "true command" "false command"
Gami[179]% ./list_76.exe "-f makefile" "head makefile" "ls"
**test of mysystem
     43 90 840
**execute shell rule --> true 的执行[存在 makefile ]
SRC = list_76
OBJS = $(SRC).o
COMP = gcc
FLAG = -lm -Wall
LANG = c
all: $(OBJS)
        $(COMP) -o $(SRC) $(OBJS) $(FLAG)
        ./$(SRC)
Gami[180]% ./list_76.exe "-d folder" "head makefile" "ls -F"
**test of mysystem
     43 90 840
**execute shell rule --> false 的执行[名叫folder 的文件夹不存在]
makefile misc/ list_76.c list_76.exe* list_76.o
Gami[181]%


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/98822/showart_1992370.html
 

相关文章推荐

Linux环境编程--waitpid与fork与execlp与system

waitpid   waitpid(等待子进程中断或结束)   表头文件   #include   #include   定义函数 pid_t waitpid(pid_t pid,int *...

Linux c进程管理—创建进程 system、execl、execlp、fork

Linux c 进程管理:   1.      创建进程:        system函数:         int system(const char*filename);             ...

模拟linux的shell---顺便复习一下fork,execlp和waitpid函数

我们知道, 如果在linux的shell中执行ls, 那么实际上shell对应的进程是父进程, ls对应的进程是子进程。 我们已经模拟过ls了, 下面, 我们来模拟一下shell, 让我们模拟的she...
  • stpeace
  • stpeace
  • 2015年04月25日 20:03
  • 1480

python的os模块fork、wait、system、exec、popen、exit函数讲解

虽然进程可在单独的内存空间中执行,但除非这些Python进程在单独的处理器上执行,否则,实际并不是“同时”运行的。是由操作系统把处理器的时间片分配给一个进程,用完时间片后就需退出处理器等待另一个时间片...

system函数和fork-exec机制

system函数 使用man system查看帮助如下: NAME        system -execute a shell command   SYNOPSIS        #include ...

多进程函数系列fork(), wait(), exec()系列,system(), posix_spawn()实例详解

多进程函数系列fork(), wait(), exec()系列,system(), posix_spawn()实例详解

linux系统编程:exec系列函数(execl,execlp,execle,execv,execvp)使用

一,exec替换进程映像 在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。 当我们创建了一个进程之后,通常将子进程替换...

linux进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)

exec族函数函数的作用:我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所...

在进程中运行新代码 execl、execle、execlp、execv、execve和execvp函数

摘要:本文主要讲述如何在进程中运行新代码,以及exec系列函数的基本使用方法.用函数fork创建子进程后,如果希望在当前子进程中运行新的程序,可以调用exec函数执行另一个程序....

FORK()函数的理解

  • 2013年05月14日 00:33
  • 113KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:system函数(fork,execlp)
举报原因:
原因补充:

(最多只允许输入30个字)