sp; sprintf(command,"ps -t tty%02i",i); system(command); } 3.exec() 功能:执行一个文件 语法:#include int execl(path,arg0,...,argn,(char*)0) char *path,*arg0,...,*argn;
int execv(path,argv) char *path,*argv[];
int execle(path,arg0,...,argn,(char*)0,envp) char *path,*arg0,...,*argn,*envp[];
int execve(path,argv,envp) char *path,*argv[],*envp[];
int execvp(file,argv) char *file,*argv[]; 说明:这是一个系统调用族, 用于将一个新的程序调入本进程所占的内 存, 并覆盖之, 产生新的内存进程映象. 新的程序可以是可执行 文件或SHELL批命令. 当C程序被执行时,是如下调用的: main(int argc,char *argv[],char *envp[]); argc是参数个数,是各个参数字符串指针数组,envp是新进程的环 境变量字符串的指针数组.argc至少为1,argv[0]为程序文件名, 所以,在上面的exec系统调用族中,path为新进程文件的路径名, file为新进程文件名,若file不是全路径名,系统调用会按PATH环 境变量自动找对应的可执行文件运行.若新进程文件不是一个可 执行的目标文件(如批处理文件),则execlp()和execvp()会将该 文件内容作为一个命令解释器的标准输入形成system(). arg0,...等指针指向'\0'结束的字符串,组成新进程的有效参数, 且该参数列表以一个空指针结束.反过来,arg0至少必须存在并指 向新进程文件名或路径名. 同样,argv是字符串指针数组,argv[0]指向新进程文件名或路径 名,并以一空指针结束. envp是一个字符串指针数组,以空指针结束,这些字符串组成新进 程的环境. 在调用这些系统调用前打开的文件指针对新进程来说也是打开的, 除非它已定义了close-on-exec标志.打开的文件指针在新进程中 保持不变,所有相关的文件锁也被保留. 调用进程设置并正被捕俘的信号在新进程中被恢复为缺省设置, 其它的则保持不变. 新进程启动时按文件的SUID和SGID设置定义文件的UID和GID为有 效UID和GID. 新进程还继承了如下属性: . 附加GID. . 进程号. . 父进程号. . 进程组号. . 会话号. . 控制终端. . alarm时钟信号剩下的时间. . 当前工作目录. . 根目录. . 文件创建掩码. . 资源限制. . 用户时间,系统时间,子进程用户时间,子进程系统时间. . 记录锁. . 进程信号掩码. . 信号屏蔽. . 优先级. . 预定值. 调用成功后,系统调用修改新进程文件的最新访问时间. 返回值:该系统调用一般不会有成功返回值, 因为原来的进程已荡然无 存. 例子:printf("now this process will be ps command\n"); execl("/bin/ps","ps","-ef",NULL); 4.popen() 功能:初始化从/到一个进程的管道. 语法:#include FILE *popen(command,type) char *command,type; 说明:本系统调用在调用进程和被执行命令间创建一个管道. 参数command做为被执行的命令行.type做为I/O模式,"r"为从被 执行命令读,"w"为向被执行命令写.返回一个标准流指针,做为管 道描述符,向被执行命令读或写数据(做为被执行命令的STDIN或 STDOUT)该系统调用可以用来在程序中调用系统命令,并取得命令 的输出信息或者向命令输入信息. 返回值:不成功则返回NULL,成功则返回管道的文件指针. 5.pclose() 功能:关闭到一个进程的管道. 语法:#include int pclose(strm) FILE *strm; 说明:本系统调用用于关闭由popen()打开的管道,并会等待由popen() 激活的命令执行结束后,关闭管道后读取命令返回码. 返回值:若关闭的文件描述符不是由popen()打开的,则返回-1. 例子:printf("now this process will call popen system call\n"); FILE * fd; if ((fd=popen("ps -ef","r"))==NULL) { printf("call popen failed\n"); return; } else { char str[80]; while (fgets(str,80,fd)!=NULL) printf("%s\n",str); } pclose(fd);
上一页 [1] [2] [3] [4] [5] [6] 下一页
|
|