on_exit()函数使用说明

本文详细介绍了Linux手册页中on_exit()函数的功能及使用方法。该函数用于注册终止处理程序,在程序通过exit()函数退出或从main函数返回时触发。终止处理程序包含两个参数:一个是exit()函数的状态值,另一个是在on_exit()函数中定义的参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:本文描述的是Linux手册页中on_exit()函数的使用说明,使用on_exit()函数注册终止处理程序.

原文来自:http://blog.youkuaiyun.com/u010006102/article/details/39740021

函数功能

  on_exit - 用来注册执行exit()函数前执行的终止处理程序。

函数声明
#include <stdlib.h>

int on_exit(void (*function)(int , void *), void *arg);
功能描述

  on_exit()用来注册终止处理程序,当程序通过调用exit()或从main 中返回时被调用, 终止处理程序有两个参数,第一个参数是来自最后一个exit()函数调用中的status,第二个参数是来自on_exit()函数中的arg;
  
  同一个函数若注册多次,那它也会被调用多次;

  当一个子进程是通过调用fork()函数产生时,它将继承父进程的所有终止处理程序。在成功调用exec系列函数后,所有的终止处理程序都会被删除。

返回值

  成功返回0,失败返回非0值。

struct pca954x_platform_mode { int adap_id; unsigned int deselect_on_exit:1; unsigned int class; }; /* Per mux/switch data, used with i2c_register_board_info */ struct pca954x_platform_data { struct pca954x_platform_mode *modes; int num_modes; }; static struct pca954x_platform_mode pca9546_mode[] = { { .deselect_on_exit = 1, }, { .deselect_on_exit = 1, }, { .deselect_on_exit = 1, }, { .deselect_on_exit = 1, }, }; static struct pca954x_platform_mode pca9548_mode[] = { { .deselect_on_exit = 1, }, { .deselect_on_exit = 1, }, { .deselect_on_exit = 1, }, { .deselect_on_exit = 1, }, { .deselect_on_exit = 1, }, { .deselect_on_exit = 1, }, { .deselect_on_exit = 1, }, { .deselect_on_exit = 1, }, }; static struct pca954x_platform_data pca9546_data = { .modes = pca9546_mode, .num_modes = ARRAY_SIZE(pca9546_mode), }; static struct pca954x_platform_data pca9548_data = { .modes = pca9548_mode, .num_modes = ARRAY_SIZE(pca9548_mode), }; static struct i2c_board_info pca954x_board_info[] = { {I2C_BOARD_INFO("pca9546", 0), .platform_data = &pca9546_data}, {I2C_BOARD_INFO("pca9548", 0), .platform_data = &pca9548_data}, }; int i2c_pca954x_register(i2c_chip_t dev) { struct i2c_adapter *adap = NULL; struct i2c_client *client = NULL; adap = i2c_get_adapter(dev.io_type); if(NULL == adap) { printk("i2c get adapter %d.\n", dev.io_type); return -1; } switch(dev.chip_type) { case GPIO_PCA9546: pca954x_board_info[0].addr = dev.addr; client = i2c_new_client_device(adap, &pca954x_board_info[0]); break; case GPIO_PCA9548: pca954x_board_info[1].addr = dev.addr; client = i2c_new_client_device(adap, &pca954x_board_info[1]); break; default: break; } if(!client) { printk("Can't create device\n"); return -1; } return 0; } 在我这个现在动态分配的基础上修改成指定分配
最新发布
06-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值