内核 --> 系统调用/库函数 --> shell --> 应用软件
用户id,组id,对应的信息存放在 /etc/passwd
和 /etc/group
中
打印当前登录用户id和组id:
int main(int argc, char *argv[]){
printf("uid = %d, gid = %d\n", getuid(), getgid());
exit(0);
}
+--------------------------------------+
| +---------------+ |
| | | |
| | application | |
| +---------------+ |
| + |
| | + |
| | | |
| +---------------+ | | |
| | |<------+ | |
| | C Lib | | |
| +-------+-------+ | |
| | | |
+---------|----------------------|-----+
| |
| |
+---------|----------------------|-----+
| | | |
| v | |
| System Call <---------------+ |
| |
| |
| |
+--------------------------------------+
可以看出库函数
还是基于系统调用
之上的。Unix为每个系统调用在标准C库中设置一个具有相同名字的函数。一般我们基于Unix的环境编程,直接操作C库函数来完成对系统调用。
- ll命令可以看出来(
ls -il
) - 进程id是递增的
perror
中的参数是char *
,为指针,防上改变。 而strerror
中的参数int
传值- 无
- (2 ** 31 -1)/(243600365) = 68 年,即1970 + 68 = 2038
- (2 ** 31 -1)/(243600100) = 248 天