《Linux下的C语言笔记》是一本记录在Linux环境下使用C语言编程的学习心得与实践经验的书籍,适合希望在Linux系统中进行高效开发的程序员阅读。
### Linux C语言笔记知识点
#### 一、GCC介绍与GDB工具
**GCC (GNU Compiler Collection)** 是一个用于编译C和C++等编程语言的标准工具链。它提供了丰富的功能来帮助开发者进行高效的代码编译。
- **编译命令**: `gcc [选项] [源文件列表]`
- **常见选项**:
- `-g`: 添加调试信息到生成的目标文件中。
- `-o`: 指定输出文件的名字。
- `-Wall`: 显示所有警告信息。
- `-Werror`: 将所有的警告都视为错误。
**GDB (GNU Debugger)** 是一个强大的调试工具,支持多种编程语言,包括C和C++。以下是启动调试会话及常用命令的简要介绍:
- **启动调试会话**: `gdb [可执行文件]`
- **常用命令**:
- `file`: 加载可执行文件。
- `list` 或 `l`: 显示源代码。
- `list 1`: 查看第一个断点之前的代码。
- `Enter`: 继续查看之后的代码。
- `break x`: 在第x行设置断点。
- `info break x`: 查看第x个断点的状态。
- `run`: 运行程序。
- `next` 或 `n`: 执行下一行代码。
- `continue` 或 `c`: 在下一个断点处停止。
- `step` 或 `s`: 进入函数内部。
#### 二、基础类型与操作符
- **基本数据类型**: 包括整型(int, short, long等)、浮点型(float, double)和字符型(char)等。
- **转义符**: 如`\n`换行,`\t`制表符等。
- **输入输出**: 使用`printf`和`scanf`进行格式化输入输出操作。
- **操作符**: 包括算术运算符、关系运算符、逻辑运算符及位运算符等多种类型的操作符。
- **优先级规则**: C语言中不同类型的运算符具有不同的执行顺序,例如乘法与除法则在加法和减法之前进行。
#### 三、字符处理函数
涉及的头文件包括``(用于字符分类)、 ``(内存分配相关)以及 `` (字符串操作)。以下是一些常用的字符串处理函数:
- `int bcmp(const void *s1, const void *s2, int n)`: 比较两个字符串的前n个字节。
- `int memcmp(const void *s1, const void *s2, size_t n)`: 类似于bcmp,但使用size_t类型作为参数长度。
- `struct tm *gmtime(time_t *timep)`: 获得UTC时间
- `char* ctime(time_t timeptr)`: 返回一个表示当前时间的字符串。
#### 四、文件结构体`struct file`
在Linux内核中,`struct file` 结构用于管理打开文件的信息。以下是一些关键成员变量:
- **定义**: 在`linux/include/linux/fs.h`(2.6.11版本) 中定义。
- `union { struct list_head fu_list; struct rcu_head fu_rcuhead } f_u`: 管理文件对象的生命周期
- `struct path f_path`: 文件路径信息
- `const struct file_operations *f_op`: 操作集合,如读写等操作函数。
- `atomic_t f_count`: 记录引用计数
#### 五、时间处理函数
- **获取当前时间**:
- 使用`time()`, `gmtime()`, 和 `localtime()` 函数分别得到系统时间和本地时间
- 利用`ctime()`和`asctime()`将标准时间结构转为字符串格式。
- **微秒级精度的时间处理**:
- 获取当前时间(精确到微妙):使用函数`gettimeofday(struct timeval *tv, struct timezone *tz)`
- 设置系统时间: 使用 `settimeofday(struct timeval *tv, struct timezone *tz)`
以上是对“Linux C语言 笔记”中提及的知识点进行的详细总结。这些知识点涵盖了C语言的基础知识、字符串处理、文件操作以及时间管理等方面,对于初学者来说是非常宝贵的资源。