欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 学习笔记第二十四天

学习笔记第二十四天

2025/5/23 19:39:39 来源:https://blog.csdn.net/m0_69699758/article/details/141172725  浏览:    关键词:学习笔记第二十四天

1.exec族函数的区别

  int exec l(const char *path, const char *arg, ...);
  int exec l p(const char *file, const char *arg, ...);
  int exec l e(const char *path, const char *arg,..., char * const envp[]);
  int exec v(const char *path, char *const argv[]);
  int exec v p(const char *file, char *const argv[]);
  int exec v pe(const char *file, char *const argv[], char *const envp[]);

        路径 vs 文件名

        使用完整路径(path)的函数(如execlexecvexecleexecve)需要指定可执行文件的

完整路径。

        使用文件名(file)的函数(如execlpexecvp)会根据PATH环境变量中指定的目录来搜索

可执行文件。

        参数传递方式

   l(list)后缀的函数(如execlexeclpexecle)要求将命令行参数逐个列出,并以NULL

为结束标志。

   v(vector)后缀的函数(如execvexecvpexecve)要求将命令行参数组织成一个字符指

针数组(char *const argv[]),并将这个数组的指针传递给函数。

        环境变量

        大多数exec函数使用调用进程继承的环境变量。以e(environment)结尾的函数(如

execleexecve)允许显式地传递一个新的环境变量数组给新程序。

        真正的系统调用

  execve是唯一真正的系统调用。其他exec函数都是库函数,它们最终都会调用execve

2. exit 库函数

        功能:exit 函数用于终止当前进程,并向父进程返回一个整数状态码。同时,它会刷新所有

输出流(如标准输出 stdout)的缓冲区,并调用通过 atexit 函数注册的所有清理函数(按注册顺

序的逆序调用)。

        参数:int status,表示进程的退出状态。通常,EXIT_SUCCESS(定义为0)表示成功,

而 EXIT_FAILURE(通常定义为1,但具体值取决于系统)表示某种形式的失败。

        返回值:exit 函数没有返回值,因为一旦调用,程序就会终止。

3. _exit 系统调用

        功能:_exit 是一个系统调用,用于立即终止当前进程,但与 exit 不同,它不会刷新输出流

的缓冲区,也不会调用 atexit 注册的清理函数。

        参数:与 exit 相同,int status 表示进程的退出状态。

        返回值:同样,_exit 也没有返回值,因为程序会立即终止。

4. atexit

        功能:atexit 函数用于注册一个函数,该函数将在程序正常终止(即调用 exit 或从 main 函

数返回)时自动调用。这可以用于执行必要的清理操作,如释放资源、关闭文件等。

        参数:void (*function)(void),一个指向函数的指针,该函数没有参数并返回 void

        返回值:成功时返回0,失败时返回非0值。通常,atexit 的失败很少见,因为它只是向一个

列表中添加一个函数指针。

5.创建 进程 (fork)   

          1.创建之后,父子进程各自拥有4g独立的内存空间         

           2.各自拥有自己的相关的程序的各个段 数据段,所以,各自之间对数据的改变,不会相互影响 

        3.子进程会继承父进程已打开的文件描述符 
             若,fork之前打开文件,父子进程操作同一个文件,相互间有影响
             若,fork之后打开文件,父子进程操作同一个文件,但是,因为各自拥有自己的 "文件表项",
             所以,各自按照自己的逻辑改变文件

6.进程的终止:8种情况

        1)main 中 return

         2)exit() //库函数 

        c库函数,会执行io库的清理工作,关闭所有 的流,以及所有打开的文件。

        注册清理函数(atexit)。

        3)_exit,_Exit 会关闭所有的已经打开的文件,不执行清理函数。 //系统调用 

        4) 主线程退出  

        5)主线程调用pthread_exit     

        异常终止:

        6)abort()

        7)signal   kill pid

        8) 最后一个线程被pthread_cancle
    

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词