📄 00000019.htm
字号:
else if (pid==0) { <BR> /*子进程处理过程*/ <BR> exit(0); /*注意子进程必须用exit()退出运行*/ <BR> } <BR> else { <BR> printf("fork error\n"); <BR> exit(0); <BR> } <BR> 2.system() <BR> 功能:产生一个新的进程, 子进程执行指定的命令. <BR> 语法:#include <stdio.h> <BR> #include <stdlib.h> <BR> int system(string) <BR> char *string; <BR> 说明:本调用将参数string传递给一个命令解释器(一般为sh)执行, 即 <BR> string被解释为一条命令, 由sh执行该命令.若参数string为一 <BR> 个空指针则为检查命令解释器是否存在. <BR> 该命令可以同命令行命令相同形式, 但由于命令做为一个参数放 <BR> 在系统调用中, 应注意编译时对特殊意义字符的处理. 命令的查 <BR> 找是按PATH环境变量的定义的. 命令所生成的后果一般不会对父 <BR> 进程造成影响. <BR> 返回值:当参数为空指针时, 只有当命令解释器有效时返回值为非零. <BR> 若参数不为空指针, 返回值为该命令的返回状态(同waitpid()) <BR> 的返回值. 命令无效或语法错误则返回非零值,所执行的命令被 <BR> 终止. 其他情况则返回-1. <BR> 例子:char command[81]; <BR> int i; <BR> for (i=1;i<8;i++) { <BR> sprintf(command,"ps -t tty%02i",i); <BR> system(command); <BR> } <BR> 3.exec() <BR> 功能:执行一个文件 <BR> 语法:#include <unistd.h> <BR> int execl(path,arg0,...,argn,(char*)0) <BR> char *path,*arg0,...,*argn; <BR> int execv(path,argv) <BR> char *path,*argv[]; <BR> int execle(path,arg0,...,argn,(char*)0,envp) <BR> char *path,*arg0,...,*argn,*envp[]; <BR> int execve(path,argv,envp) <BR> char *path,*argv[],*envp[]; <BR> int execvp(file,argv) <BR> char *file,*argv[]; <BR> 说明:这是一个系统调用族, 用于将一个新的程序调入本进程所占的内 <BR> 存, 并覆盖之, 产生新的内存进程映象. 新的程序可以是可执行 <BR> 文件或SHELL批命令. <BR> 当C程序被执行时,是如下调用的: <BR> main(int argc,char *argv[],char *envp[]); <BR> argc是参数个数,是各个参数字符串指针数组,envp是新进程的环 <BR> 境变量字符串的指针数组.argc至少为1,argv[0]为程序文件名, <BR> 所以,在上面的exec系统调用族中,path为新进程文件的路径名, <BR> file为新进程文件名,若file不是全路径名,系统调用会按PATH环 <BR> 境变量自动找对应的可执行文件运行.若新进程文件不是一个可 <BR> 执行的目标文件(如批处理文件),则execlp()和execvp()会将该 <BR> 文件内容作为一个命令解释器的标准输入形成system(). <BR> arg0,...等指针指向'\0'结束的字符串,组成新进程的有效参数, <BR> 且该参数列表以一个空指针结束.反过来,arg0至少必须存在并指 <BR> 向新进程文件名或路径名. <BR> 同样,argv是字符串指针数组,argv[0]指向新进程文件名或路径 <BR> 名,并以一空指针结束. <BR> envp是一个字符串指针数组,以空指针结束,这些字符串组成新进 <BR> 程的环境. <BR> 在调用这些系统调用前打开的文件指针对新进程来说也是打开的, <BR> 除非它已定义了close-on-exec标志.打开的文件指针在新进程中 <BR> 保持不变,所有相关的文件锁也被保留. <BR> 调用进程设置并正被捕俘的信号在新进程中被恢复为缺省设置, <BR> 其它的则保持不变. <BR> 新进程启动时按文件的SUID和SGID设置定义文件的UID和GID为有 <BR> 效UID和GID. <BR> 新进程还继承了如下属性: <BR> . 附加GID. <BR> . 进程号. <BR> . 父进程号. <BR> . 进程组号. <BR> . 会话号. <BR> . 控制终端. <BR> . alarm时钟信号剩下的时间. <BR> . 当前工作目录. <BR> . 根目录. <BR> . 文件创建掩码. <BR> . 资源限制. <BR> . 用户时间,系统时间,子进程用户时间,子进程系统时间. <BR> . 记录锁. <BR> . 进程信号掩码. <BR> . 信号屏蔽. <BR> . 优先级. <BR> . 预定值. <BR> 调用成功后,系统调用修改新进程文件的最新访问时间. <BR> 返回值:该系统调用一般不会有成功返回值, 因为原来的进程已荡然无 <BR> 存. <BR> 例子:printf("now this process will be ps command\n"); <BR> execl("/bin/ps","ps","-ef",NULL); <BR> 4.popen() <BR> 功能:初始化从/到一个进程的管道. <BR> 语法:#include <stdio.h> <BR> FILE *popen(command,type) <BR> char *command,type; <BR> 说明:本系统调用在调用进程和被执行命令间创建一个管道. <BR> 参数command做为被执行的命令行.type做为I/O模式,"r"为从被 <BR> 执行命令读,"w"为向被执行命令写.返回一个标准流指针,做为管 <BR> 道描述符,向被执行命令读或写数据(做为被执行命令的STDIN或 <BR> STDOUT)该系统调用可以用来在程序中调用系统命令,并取得命令 <BR> 的输出信息或者向命令输入信息. <BR> 返回值:不成功则返回NULL,成功则返回管道的文件指针. <BR> 5.pclose() <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -