yinble

导航

 

一个最简单的解释器,回显运行的所有参数:

#include "apue.h"

int
main(int argc, char *argv[])
{
    int        i;

    for (i = 0; i < argc; i++)        /* echo all command-line args */
        printf("argv[%d]: %s\n", i, argv[i]);
    exit(0);
}

解释器文件yshtest,里面只有一行:

#!/bin/ysh -f

这个执行后相当于这个命令:

/bin/ysh -f yshtest

解释器执行程序:

#include "apue.h"
#include <sys/wait.h>

char    *env_init[] = { "USER=unknown", "PATH=/tmp", NULL };

int
main(void)
{
    pid_t    pid;

    if ((pid = fork()) < 0) {
        err_sys("fork error");
    } else if (pid == 0) {    /* specify pathname, specify environment */
        if (execle("yshtest", "yshtest", "myarg1",
                "MY ARG2", (char *)0, env_init) < 0)
            err_sys("execle error");
    }

    if (waitpid(pid, NULL, 0) < 0)
        err_sys("wait error");

    if ((pid = fork()) < 0) {
        err_sys("fork error");
    } else if (pid == 0) {    /* specify filename, inherit environment */
        if (execlp("./echoall", "echoall", "only 1 arg", (char *)0) < 0)
            err_sys("execlp error");
    }

    exit(0);
}

关键语句就是execle("yshtest", "yshtest", "myarg1", "MY ARG2", (char *)0, env_init);

posted on 2013-03-28 10:45  yinble  阅读(146)  评论(0编辑  收藏  举报