伴奏网站防盗是怎么做的,linux建网站,二级网站和自建网站有什么区别,设计网站怎么设计个人主页点击直达#xff1a;小白不是程序媛
Linux专栏#xff1a;Liunx系统化学习
代码仓库#xff1a;Gitee 目录
获取函数返回值
退出码
进程退出的场景
错误码
信号终止异常代码
进程的终止
main函数直接return
exit函数
_exit函数 获取函数返回值
在C语言学…
个人主页点击直达小白不是程序媛
Linux专栏Liunx系统化学习
代码仓库Gitee 目录
获取函数返回值
退出码
进程退出的场景
错误码
信号终止异常代码
进程的终止
main函数直接return
exit函数
_exit函数 获取函数返回值
在C语言学习过程中每次主函数或者自己写的函数都会返回一个值return x而且在main函数最后我们通常会返回0return 0 那么这个值返回给谁呢必须返回0吗返回其他的数字不行吗有什么用呢
其实在Linux中我们可以使用指令拿到这个main函数最后的返回值 echo $? int main()
{return 10;
}
我们什么也不干只需要在main函数中返回一个非0数使用上面的指令获取 其实在Liunx中 就相当于一个环境变量保存最近一次进程的返回值 。 退出码
在Linux中运行我们编写的程序相当于创建一个新的进程我们又知道每个进程都有自己的父进程这样就通了当我们的代码运行完毕时进程会退出子进程是由父进程创建用来完成某些任务的子进程退出时父进程肯定要知道子进程任务完成得怎么样因此子进程需要返回一些信息这些信代表着子进程任务完成得怎样。
进程退出的场景 代码运行完毕结果正确代码运行完毕结果不正确代码异常终止 就像在现实生活中我们完成一些任务也只有这三种情况任务完成了拿到好的结果任务完成了没有拿到好结果完成任务时因为一些突发状况没能完成终止了 在C语言中返回0代表success非0代表failed这些0或者非0的数字就代表进程的退出码每个不同的数字代表程序退出的不同原因这就是退出码。 然而非0的数字又有很多随便说一个数字我们也不知道是什么意思不是很便于人们理解这个数字的意义可以自己定义但是在C语言库中存在 1 #includestdio.h2 #includeunistd.h3 #includestdlib.h4 #includestring.h 18 int main()19 20 {21 int i 0 ;22 for(i 0 ;i200 ;i)23 {24 printf(%d %s\n,i,strerror(i));25 }26 return 10;38 }总共有133退出码每个退出码都有其指定的含义 因此父进程通过获取子进程的退出码得知子进程运行结束后的结果。 错误码
编写程序时我们会使用各种的系统调用或者使用库函数当然进行这些调用时也会出现调用失败影响我们的程序运行。因此C语言中有一个宏常量errno代表我们进行系统的出错信息调用结束后会自动设置 #includestdio.h2 #includeunistd.h3 #includestdlib.h4 #includestring.h5 #includeerrno.h18 int main()19 20 {21 printf(before : %d \n,errno);22 FILE *pf fopen(data.txt,r);23 printf(before : %d \n,errno);24 printf(%s\n,strerror(errno));} 使用库函数打开一个文件时当文件不存在时调用的库函数就要返回指定的数字也就是errno代表着调用库函数结束的结果配合strerror可以清楚的得到程序运行的结果的具体原因。
退出码与错误码 错误码通常是衡量一个库函数或者一个系统调用一个函数的调用情况退出码通常时一个进程退出的时候其自己退出的结果都是用来衡量函数、进程出错的详细原因。 信号终止异常代码
代码能运行结束是是上面的情况还有一种特别严重的问题就是代码运行期间由于代码异常而造成的进程终止代码异常时退出码或者错误码已经没有任何意义了。 1 #includestdio.h2 #includeunistd.h3 #includestdlib.h4 #includestring.h 5 #includeerrno.h 17 18 int main() 19 {20 int i 10/0;21 return 0; } 在编译期间就会报异常运行这个代码会报浮点数异常因为非法的操作操作系统通过信号会终止这个进程 因此一个进程是否出异常我们只需要看有没有收到信号即可 进程的终止
main函数直接return 1 #includestdio.h 2 int func() 3 { 4 return 1;5 }6 int main()7 {8 func(); 9 return 0; 10 } 通过上面的实验我们我们可以得出结论在其他函数中return表示的是这个函数的调用结束而不是进程的终止 exit函数
我们对上面的程序进行修改直接在main函数一开始调用exit函数 1 #includestdio.h2 int func()3 {4 return 1;5 }6 int main()7 {8 exit(30); 9 func();10 return 0;11 } 我们会发现exit会直接终止进程不会执行后面的代码且exit的参数为这个进程的退出码。 _exit函数
相同点 exit函数和_exit函数都是用来终止进程的参数都是此进程的退出码。 不同点 exit()函数是库函数底层使用_exit函数包装起来的_exit()函数是系统调用exit()函数终止进程的时候会自动刷新缓冲区。_exit()函数终止进程的时候不会自动刷新缓冲区。 今天对Linux下进程的终止的分享到这就结束了希望大家读完后有很大的收获也可以在评论区点评文章中的内容和分享自己的看法。您三连的支持就是我前进的动力感谢大家的支持