浅谈linux下的一些常用函数的总结(必看篇)_Linux

1.exit()函数

exit(int n)  其实就是直接退出程序,

因为默认的标准程序入口为int main(int argc, char** argv),返回值是int型的。

一般在shell下面,运行一个程序,然后使用命令echo $?就能得到该程序的返回值,也就是退出值,在main()里面,你可以用return n,也能够直接用exit(n)来做。unix默认的习惯正确退出是返回0,错误返回非0。

重点:单独的进程是返回给操作系统的。如果是多进程,是返回给父进程的。

在父进程里面调用waitpid()等函数得到子进程退出的状态,以便作不同处理

返回值不能超过255.

在stdlib.h里面有定义

#define    EXIT_SUCCESS    0
#define    EXIT_FAILURE    1 

C程序的终止分为两种: 正常终止和异常终止.

正常终止分为: return, exit, _exit, _Exit, pthreade_exit

异常中指分为: abort, SIGNAL, 线程响应取消

主要说一下正常终止的前4种, 即exit系列函数.

#include <stdlib.h>
void exit(int status);
void _Exit(int status);
#include <unistd.h>
void _exit(int status);

以上3个函数的区别是:

exit()(或return 0)会调用终止处理程序和用户空间的标准I/O清理程序(如fclose), _exit和_Exit不调用而直接由内核接管进行清理.

#include<stdlib.h>
int atexit(void (*function)(void))

返回值:成功返回0,失败返回非零数.

ISO C规定, 一个进程最对可登记32个终止处理函数, 这些函数由exit按登记相反的顺序自动调用. 如果同一函数登记多次, 也会被调用多次.

#include<stdlib.h>
#include<unistd.h>
static void my_exit1()
{
printf("first exit handlern\n");
}

static void my_exit2()
{
 printf("second exit handlern\n");
}

int main()
{
 if (atexit(my_exit2) != 0)
printf("can't register my_exit2n\n");
 if (atexit(my_exit1) != 0)
printf("can't register my_exit1n\n");
 if (atexit(my_exit1) != 0)
printf("can't register my_exit1n\n");

 printf("main is donen\n");
 return 0;
}
addia@addia-Lenovo-B470:~$ ./test
main is donen
first exit handlern
first exit handlern
second exit handlern

以上就是小编为大家带来的浅谈linux下的一些常用函数的总结(必看篇)全部内容了,希望大家多多支持~

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索linux常用函数
linux必看书籍、浅谈linux性能调优、linux常用命令、linux常用命令大全、linux常用命令详解,以便于您获取更多的相关知识。

时间: 2024-10-02 10:24:59

浅谈linux下的一些常用函数的总结(必看篇)_Linux的相关文章

浅谈Linux下tar,jar压缩,解压的常用命令_Linux

如下所示: tar cvf /data/d2/apps.tar apps cd /data01/applsrm/SRM tar xvf apps.tar jar cvf /data01/xxx.jar * cd wq jar xvf xxxx.jar 以上这篇浅谈Linux下tar,jar压缩,解压的常用命令就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持. 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮

浅谈Linux下通过find命令进行rm文件删除的小技巧_Linux

我们经常会通过find命令进行批量操作,如:批量删除旧文件.批量修改.基于时间的文件统计.基于文件大小的文件统计等,在这些操作当中,由于rm删除操作会导致目录结构变化,如果要通过find结合rm的操作写成脚本,就会遇到一些麻烦,本文通过一个例子为大家进行介绍. 系统环境: SUSE Linux Enterprise Server 11 或 Red Hat Enterprise Linux 问题症状: 客户现场有一个自动化的脚本,有以下的find语句,每天运行以删除某个目录下7天以前的文件或目录,

Linux磁盘分区实战案例(必看篇)_Linux

一.查看新添加磁盘 [root@localhost /]# fdisk -l 磁盘 /dev/sda:53.7 GB, 53687091200 字节,104857600 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x0009f1d1 设备 Boot Start End Blocks Id System /dev/s

浅谈Linux下的syslog守护进程

syslog是Linux下默认的日志守护进程.任何希望生成日志信息的程序都可以通过syslog 接口实现该目的. 同时,几乎所有的网络设备都可以通过syslog协议,将日志信息以UDP的形式传送给远端服务器,远端接收日志服务器必须通过syslogd监听UDP端口514,并根据 syslog.conf 配置文件张的配置处理.配置文件 /etc/rsyslog.conf 中规定了syslogd如何根据设备和信息的重要级别来报告信息. 这里只需要有个大致了解即可,下面都会提到这些东西. 关于配置文件:

浅谈linux几种定时函数的使用_Linux

在程序开发过程中,我们时不时要用到一些定时器,通常如果时间精度要求不高,可以使用sleep,uslepp函数让进程睡眠一段时间来实现定时, 前者单位为秒(s),后者为微妙(us):但有时候我们又不想让进程睡眠阻塞在哪儿,我们需要进程正常执行,当到达规定的时间时再去执行相应的操作, 在linux下面我们一般使用alarm函数跟setitimer函数来实现定时功能: 下面对这两个函数进行详细分析: (1)alarm函数 alarm也称为闹钟函数,它可以在进程中设置一个定时器,当定时器指定的时间到时,

浅谈NT下Ring3无驱进入Ring0的方法

[原创]浅谈NT下Ring3无驱进入Ring0的方法 关键字:NT,Ring0,无驱   (测试环境:Windows 2000 SP4,Windows XP SP2. Windows 2003 未测试)   在NT下无驱进入Ring0是一个老生常谈的方法了,网上也有一些C代码的例子,我之所以用汇编重写是因为上次在 [原创/探讨]Windows 核心编程研究系列之一(改变进程 PTE) 的帖子中自己没有实验成功(其实已经成功了,只是自己太马虎,竟然还不知道 -_-b),顺面聊聊PM(保护模式)中的

浅谈Linux配置定时,使用crontab -e与直接编辑/etc/crontab的区别_Linux

Linux配置定时任务,大家都知道使用crontab这个系统功能,但有时候我们需要区分用户执行,下面就直接说一下2种方法的区别: 方法1: 使用命令 crontab -e 然后直接编辑定时脚本. 这样执行以后,属于用户自定义的,会被写到 /var/spool/cron 目录下,生成一个和用户名一致的文件,文件内容就是我们编辑的定时脚本. 如: [root@localhost cron.d]# cd /var/spool/cron [root@localhost cron]# ll 总用量 4 -

浅谈sqlserver下float的不确定性

很多时候,大家都知道,浮点型这个东西,本身存储就是一个不确定的数值,你永远无法知道,它是 0 = 0.00000000000000123 还是 0 = 0.00000000000999这样的东西.也许一开始使用的时候没有问题,但是有时候做统计的时候,就会看出端倪 简单的举个例子,就知道统计的时候,有可能出现意外的效果,导致可能需要存储过程或者接收程序的代码左额外的取舍数位的处理,所以在此其实我是推荐使用Numeric来替代float进行一个替代使用,避免一个sum ,然后明明明细看每一条数据都是

linux下串口编程read函数返回(非超时返回)问题

问题描述 linux下串口编程read函数返回(非超时返回)问题 串口编程经典应用场景:打开串口,阻塞模式,非超时返回,有数据返回,无数据死等. 简易代码为例: void* read_thread(void* param) { char szbuf[128]; int size = 0; while (running) { size = read(fd, szbuf, sizeof(szbuf)); } return 0; } int main() { fd = open(port, O_RDW