系统编程概念

发布 : 2017-12-15 分类 : Linux/UNIX 系统编程 浏览 :

系统编程概念

本文章内容摘自 《Linux/Unix系统编程手册》

系统调用

系统调用是受控的内核入口,进程可以请求内核以自己的名义去执行某些动作。

重要概念:

  1. 系统调用会使处理器从用户状态切换到内核状态,使 CPU 访问受到保护的内核内存。
  2. 每个系统调用都由一个唯一数字来标识。
  3. 每个系统调用都对用户空间与内核空间之间传递的信息用参数加以规范。
  4. 使用系统调用时需要注意调用开销。
  5. 当执行系统调用时,需要临时性地切换到核心态,而且,内核还需要验证系统调用的参数、用户内存和内核内存也有数据需要传递。

库函数

库函数是构成标志C语音函数库的众多库函数之一。大多数库函数不会使用任何系统调用。部分库函数构建于系统调用层之上。

标准C语言库函数

标准C语言库函数的实现随UNIX的实现而异。GNU C语言函数库是 Linux 上最常用的实现。

确定系统的 glibc 版本

在 shell 中可以直接运行 glibc 共享库文件,来获取glibc版本。 运行示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/lib64/libc.so.6
GNU C Library stable release version 2.12, by Roland McGrath et al.
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.4.7 20120313 (Red Hat 4.4.7-18).
Compiled on a Linux 2.6.32 system on 2017-06-20.
Available extensions:
The C stubs add-on version 2.1.2.
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
Native POSIX Threads Library by Ulrich Drepper et al
BIND-8.2.3-T5B
RT using linux kernel aio
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
http://www.gnu.org/software/libc/bugs.html.

我们还可以调用下面函数,来确定运行是的glibc版本。该函数返回一个字符串指针。

1
2
3
4
#define _GNU_SOURCE
#include <gnu/libc-version.h>

const char *gnu_get_libc_version(void);

本文章内容摘自 《Linux/Unix系统编程手册》,点击这里阅读本书

本文作者 : Lojze
原文链接 : http://blog.flowlore.com/passages/concept-of-system-programming/
版权声明 : 版权声明: 本博客所有文章除特别声明外, 均采用 CC BY-NC-SA 4.0 许可协议. 转载请注明出自《舍予书》
留下足迹