nynw.net
当前位置:首页 >> Linux下写一个C程序,创建一个子进程,利用ExECl系... >>

Linux下写一个C程序,创建一个子进程,利用ExECl系...

#include #include int main() { int pid; pid = fork(); if (pid < 0) { printf("Failed to fork!\n"); return 1; } if (pid > 0) { wait(NULL); } else { execlp("/bin/ls", "/bin/ls", "-l", NULL); } return 0; }

execl,l代表list,参数表的意思, (char *) 0,代表空指针,说明参数表结束。 这个函数的原型是可变参数,空指针给库解析参数的时候防止程序错误。execl是个库函数,真正的系统调用是execve。

我来试试吧 首先,你用的execl是属于exe家族里面的一个函数,这个家族其实都差不多,参数有稍微的差别 一般用法是fork调用后在子进程里面调用exec函数族,所以很好理解,程序流程就是到fork分支后子进程调exec 父进程调wait就可以了 不复杂吧,谢谢

int execl(const char *path, const char *arg, ...);是系统提供的接口函数 execl是exec函数族中的一员 exec族函数的功能是加载一个新的程序替换掉当前的进程 它可以调用一个外部程序到当前的进程空间里 但不会产生一个新的进程(它只是将当前进...

linux c system函数介绍: system(执行shell 命令) 相关函数 fork,execve,waitpid,popen 表头文件 #i nclude 定义函数 int system(const char * string); 函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行...

写两个测试程序测试一下,在程序里面加log。 自己调试才会理解深刻。 很简单的一个进程编写问题。

execl的man手册第一句话就说了:The exec() family of functions replaces the current process image with a new process image.你的整个进程空间都已经被替换成新的进程了,哪儿还有下面?下面已经太监了,不会再有了。所有execl之后的代码都...

没看明白问题 如果是被调程序加载动态库,那是自动的,由主调进程环境变量决定。 如果是主调程序加载动态库,则需dlopen打开文件,dlsym按符号获取映射地址,也就是函数或全局数据地址。

可以啊 只不过用了excel之后就不执行它后面的语句了。 所以你应该用fork创建一个新进程

因为exec系列的函数(包括execl函数)都是将当前进程替换成新进程,也就是说新进程启动后原来的进程就不存在了,exec系列函数后面的那些代码就不会再执行了。如果你不放在fork子进程里面,那主进程在执行execl函数后就完全不存在了,所以exec系...

网站首页 | 网站地图
All rights reserved Powered by www.nynw.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com