Unix-进程

发布于:2025-02-23 ⋅ 阅读:(9) ⋅ 点赞:(0)

1.O_EXCL

作用:

2. exec  
  #include <unistd.h>

       extern char **environ;
       int execl(const char *path, const char *arg0, ... /*, (char *)0 */);
       int execle(const char *path, const char *arg0, ... /*,(char *)0, char *const envp[]*/);

 
       int execlp(const char *file, const char *arg0, ... /*, (char *)0 */);


      
       int execv(const char *path, char *const argv[]);
       int execve(const char *path, char *const argv[], char *const envp[]);


       int execvp(const char *file, char *const argv[]);
       int execvpe(const char *file, char *const argv[],char *const envp[]);

进程的 image  = 进程的组成部分(text|data|bss|堆栈)
int execl(const char *path, const char *arg0, ... /*, (char *)0 */);
int execv(const char *path, char *const argv[]);
功能:
   执行一个新的程序 
 
l 和 v 
list     //列举  --- 后面的参数逐个列举出来 
vector   //向量  --- 后面的参数 以字符串指针数组的形式组织 

参数:
  @path   //说明 --要执行的可执行文件的名字 (包含路径)   
  @arg0   //执行文件的名字 
  ...     //可变参数
          //看要执行的文件 是否有需要的参数 
          //形式 字符串形式 最终 以 NULL作为结尾          
   
eg:
   
  ls  //系统提供的命令 本质 是一个可执行文件   
      //which 命令名 ---查看命令在系统中位置 
  
  ls -l /
  execl("/bin/ls","ls","-l","/",NULL); 
  char *const arg[] = {"ls","-l","/",NULL};
  execv("/bin/ls",arg); 

bash
     |
   fork()
   /   \ 
 bash  bash (+exec 函数调用 --- 它会用新程序的镜像替换原有镜像,
            名字也变了,父子关系没变)

int execle(const char *path, const char *arg0, ... /*,(char *)0, char *const envp[]*/);
 int execve(const char *path, char *const argv[], char *const envp[]);
 
 e --- environment 
 应用:
    有些程序 ,运行时,需要获得环境变量 (系统的 或者 自定义)

3.strtok()    
    
     char *strtok(char *str, const char *delim);
     功能:
         分割字符串 
     参数:
        str  表示要分割的字符串  //如果填写NULL 表示接着原来的字符串继续分割 
        delim 表示分割标志 
     返回值:
        成功 返回分割出来的字符串地址
        失败 返回NULL
    
    char *arg[] = {"ls","-l","/",NULL};
    execvp(arg[0],arg);
    
    
创建 -fork
执行
   复制父进程
   执行一个新程序 
退出 


   
    

4.wait() //

pid_t wait(int *wstatus);
功能:
   等待子进程状态改变 
   (主要用来 --- 回收子进程的资源----避免僵尸态)
参数:
    wstatus      NULL  //表示不关心子进程退出时 状态信息 
                不是NULL //想关心子进程退出状态信息
返回值:
   成功 返回结束了的子进程的pid号 
   失败  -1
说明:
  1.wait ---阻塞操作 
  2.如果没有任何子进程,wait调用失败 --提示 NO child process

    


网站公告

今日签到

点亮在社区的每一天
去签到