- 用exec函数创建一个进程,显示当前目录下的文件信息
exec函数族作用是程序替换
#include<stdio.h>
#include<unistd.h>
int main()
{
if(execl("/bin/ls","ls","-l",NULL)==-1)
{
printf("execl failed\n");
}
else
{
printf("execl success");
}
return 0;
}
2.Execle函数的应用。要在程序设计时设定环境变量,路径为tmp,用户名为liu,执行命令env时要把这些环境变量传递给系统。在这一函数中,参数e表示可传递新进程环境变量;参数l表示参数或命令的逐个列举,文件查找需给出路径。命令env在”/bin”目录下。
把环境变量设定为
Char *envp[]={“PATH=/tmp”,”USER=liu”,NULL};
因此函数的调用形式为
Execle(“/bin/env”,”env”,NULL,envp);
请编写一程序进行测试。
env 命令可以查看环境变量和删除环境变量
#include<stdio.h>
#include<unistd.h>
int main()
{
char *envp[]={"PATH=/tmp","USER=liu",NULL};
execle("/bin/env","env",NULL,envp);
return 0;
}
3.execve函数的应用,要在程序执行时设定执行环境变量,路径为tmp,用户名为liu,执行命令env时要把这些环境变量传递给系统。在这一函数中,参数e表示可传递新进程环境变量;参数v表示传递的参数(含命令)为构造指针数组,文件查找需给出路径。命令env在”/bin”目录下。
把环境变量设定为
Char *envp[]={“PATH=/tmp”,”USER=liu”,NULL};
参数的构造指针数组为
Char *arg[]={“env”,NULL};
因此函数的调用形式为
Execve(“/bin/env”,arg,envp);
请编写一程序进行测试。
#include<stdio.h>
#include<unistd.h>
int main()
{
char *envp[]={"PATH=/tmp","USER=liu",NULL};
char *arg[]={"env",NULL};
execve("/bin/env",arg,envp);
return 0;
}
3.编写一个后台检查邮件的程序,这个程序每隔一段指定时间回去检查邮箱,如果发现有邮件了,会不断通过机箱上的小喇叭来发出声音报警(Linux的默认个人邮箱地址是
4.编写程序mysh.c,在其主函数中读取“命令字符串”(由第二个参数开始的所有命令行参数构成),在程序中创建一个子进程,然后在子进程中调用exec执行该命令字符串。如:用户输入“mysh ls -l”,则在子进程中执行“ls -l命令”。最后,父进程等待子进程执行完毕后以子进程的退出状态退出。
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<time.h>
int main(int argc,char **argv)
{
pid_t pid;
pid=fork();
int status;
if(pid<0)
{
printf("fork failed\n");
exit(0);
}
char **ar;
for(int i=0;i<argc-2;i++)
{
ar[i]=argv[i+1];
}
// ar[argc-2]=NULL;
if(pid==0)//创建子进程
{
printf("子进程开始\n");
execlp("ls","ar",NULL);
exit(0);
}
else
{
clock_t start,end;
start=clock();
wait(&status);
end=clock();
double time=(double)(end-start)/CLOCKS_PER_SEC;
printf("这是父进程,正在等待子进程.....\n");
printf("等待时间为:%d\n",time);
int i=WEXITSTATUS(status);
printf("子进程退出时的状态:%d\n",i);
exit(i);
}
return 0;
}
~