linux随便记记

1. 保存的设置用户id

实际用户id,有效用户id都知道的,但是还有个保存的设置用户id,这个id在程序执行时,被设置为有效用户id。它的用处:用户a启动一个设置了uid(b)的程序,那么程序的3个id值为实际用户id(a),有效用户id(b),保存的设置id(b),用户a可以调用setuid将程序的有效id设置为a,那么他怎么把程序的有效id重新设为b呢,怎么验证是否可以设置呢,就靠这个保存的设置id拉,所以有效用户id可以设置为实际用户id和保存的设置id中的一个。


2.信号 SIGTTIN & SIGTTOU

这2个信号一般大家不怎么遇到,SIGTTIN 当后台进程去读取终端时,发送;SIGTTOU当后台进程去写终端时,发送(默认不会发送,要通过stty tostop禁止后台写,才会发送);这2个信号都会导致进程stop。可以通过fg命令,将进程切换到前台进程,就能让进程继续执行。


3. offsetof宏

offsetof(TYPE, MEMBER)
该宏在Linux内核代码(版本2.6.22)中定义如下:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER);
 
分析:
(TYPE *)0,将 0 强制转换为 TYPE 型指针,记 p = (TYPE *)0,p是指向TYPE的指针,它的值是0。那么 p->MEMBER 就是 MEMBER 这个元素了,而&(p->MEMBER)就是MENBER的地址,而基地址为0,这样就巧妙的转化为了TYPE中的偏移量。再把结果强制转换为size_t型的就OK了,size_t其实也就是int。


这个宏没想到在实际工作中能用的上,看来还是有广泛的用途的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值