加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

使用execvp()函数需要谨慎的两点

发布时间:2021-12-18 18:38:30 所属栏目:PHP教程 来源:互联网
导读:exec系统调用会从当前进程中把当前程序的机器指令清除,然后在空的进程中载入调用时指定的程序代码,最后运行这个新的程序。 #includestdio.h #includesignal.h #includestring.h #includeunistd.h #define MAXARGS (20) #define ARGLEN (100) int main() {

exec系统调用会从当前进程中把当前程序的机器指令清除,然后在空的进程中载入调用时指定的程序代码,最后运行这个新的程序。
 
#include<stdio.h>   
#include<signal.h>   
#include<string.h>   
#include<unistd.h>   
  
#define     MAXARGS     (20)   
#define     ARGLEN      (100)   
  
int main()  
{  
    char *arglist[MAXARGS + 1];  
    int numargs;  
    char argbuf[ARGLEN];   
    char *makestring();  
  
    numargs = 0;  
  
    while(numargs < MAXARGS)  
    {  
        printf("Arg[%d]?", numargs);  
        if(fgets(argbuf, ARGLEN, stdin) && *argbuf != 'n')  
            arglist[numargs ++] = makestring(argbuf);  
        else  
        {  
            if(numargs > 0)   
            {  
                arglist[numargs] = NULL;  
                execute(arglist);  
                numargs = 0;  
            }  
        }  
    }  
  
    return 0;  
}  
  
int execute(char* arglist[])  
{  
/*
*#include<unistd.h>  
*int execlp(const char* file, const char* argv ...)
* eg. execlp("ps","ps","-au","-x",(char*)0);
*    1.最后一个参数必须是(char*)0, 如果不强制转换成char*,就会自动转换成int* 有未知的错误。
*    2.第一个参数是要运行的文件,会在环境变量PATH中查找file.
*    3.失败会返回-1, 成功无返回值,但是,会在当前进程运行,执行成功后,直接结束当前进程。可以在子进程中运行。
*    4.第二个参数,是一个参数列表,如同在shell中调用程序一样,参数列表为0,1,2,3……因此,ps作为第0个参数,需要重复一遍
*    int execvp(const char* file, const char* argv[]);  argv列表最后一个必须是 NULL
*/  
    execvp(arglist[0], arglist);  
    perror("execvp failed");  
    exit(1);  
}  
  
char* makestring(char *buf)  
{  
    char *cp, *malloc();  
  
    buf[strlen(buf) - 1] = '';  
    cp = malloc(strlen(buf) + 1);  
  
    if(cp == NULL)  
    {  
        fprintf(stderr, "no memoryn");  
        exit(1);  
    }  
    strcpy(cp, buf);  
    return cp;  
}  

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读