Linux C学习路线全概及知识点笔记1(仅供个人参考)
系列文章目录
第一章 Linux基本操作
目录
系列文章目录
前言
1.Linux基本操作
1.1 Linux目录结构
1.11 常见注意点与建议
1.2 文件类型
1.3 目录操作
1.4 文件操作
1.5 gcc命令
1.6 shell脚本
1.6.1 常见条件测试操作符
1.6.2 shell高级语法之case xx in ...esac
编辑
1.7 Makefile的编写
1.7.1 Makefile 基本工作原理
1.7.2 典型的工作流程
1.7.3.1 具体步骤
编辑
1.7.4 伪目标
1.7.5 3个常用的函数
1.7.5.1 wildcard函数
1.7.5.2 patsubst函数
1.7.5.3 结合使用wildcard 和 patsubst
1.7.6 basename函数
1.7.7 自动化规则变量
1.7.8 简单Makefile示例
1.7.9 其它高级Makefile函数,待补充
2,C语言知识点(不叙述)
3,数据结构
3.1 冒泡排序(Bubble Sort)
3.2 直接插入排序 (Insertion Sort)
3.3 快速排序
3.3.1 快速排序原理(Divide and Conquer)
3.3.2 快速排序代码实现(基础版)
3.4 二叉树(待实现)
4. 链表操作
4.1 链表基础结构与类型
4.2 常见操作总览
4.2 创建链表
4.3 插入操作
4.4 删除操作
4.5 修改节点
4.6 查找操作
4.7 遍历与打印链表
4.8 释放链表
4.9 测试示例
5,进阶-Linux编程
5.1 掌握POSIX文件I/O API
5.2 熟练写出“文件拷贝”模块代码(使用系统调用)
5.3 理解缓冲的概念
对比说明:
6,进程控制类API
6.1 fork函数
6.2 exec族函数(用于执行另一个程序)
6.2.1 常用函数对比
7. 线程类控制API
7.1 线程创建:pthread_create
7.2 等待线程退出:pthread_join
7.3 线程退出:pthread_exit
7.4 线程取消:pthread_cancel
7.5 线程同步机制(常用)
7.5.1 互斥锁
7.5.2 条件变量 pthread_cond_t
7.5.3 读写锁 pthread_rwlock_t
7.5.4 多线程编程接口示例
7.6 总结对比表
前言
文章记录Linux C相关学习笔记
1.Linux基本操作
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
1.1 Linux目录结构
Linux中一切皆文件,系统所有内容都挂载在根目录 / 下,核心目录结构如下:
|
---|
1.11 常见注意点与建议
(1)系统重要目录不要轻易改动权限或删除文件,如/etc、/bin
(2)/usr 是只读的(或视为只读的),/usr/local 可供用户安装自定义软件
(3)/var/log 是查看系统日志的主要目录,如syslog、dmesg
(4)挂载新分区时,推荐使用/mnt 或 /media
(5)对于嵌入式系统或精简系统,可以裁剪目录,仅保留 /bin、/sbin、/etc、/dev、/proc等最基本结构(如BusyBox环境)
1.2 文件类型
文件类型 | 符号 | 示例 | 描述 |
---|---|---|---|
普通文件 | - | myfile.txt | 存储文本、二进制数据等内容的普通文件。 |
目录文件 | d | /home | 存放文件和子目录的容器。 |
符号链接 | l | link_to_file | 指向其他文件的引用。 |
块设备文件 | b | /dev/sda | 设备文件,用于与硬盘等块设备进行交互。 |
字符设备文件 | c | /dev/ttyS0 | 用于与串口设备等字符设备交互的文件。 |
管道文件 | p | mypipe | 用于进程间通信的文件。 |
套接字文件 | s | /tmp/socket | 用于网络或进程间通信的文件。 |
门文件 | D | door_file | 用于进程间通信的文件(在 Solaris 中使用较多)。 |
1.3 目录操作
操作 | 命令及选项 | 示例 |
---|---|---|
查看当前目录 | pwd | /home/user |
列出目录内容 | ls / ls -l / ls -a / ls -R | ls -la |
创建目录 | mkdir new_directory / mkdir -p | mkdir -p /home/user/new_folder |
删除空目录 | rmdir directory_name | rmdir old_directory |
删除非空目录 | rm -r directory_name | rm -r old_directory |
更改当前目录 | cd /path/to/directory | cd /home/user/Documents |
复制目录 | cp -r source_directory destination | cp -r folder /home/user/backup/ |
移动或重命名目录 | mv source_directory destination | mv old_folder new_folder |
查找目录中的文件 | find /path -name "filename" | find /home/user -name "*.txt" |
查看目录空间使用情况 | du -sh /path/to/directory | du -sh /home/user/Documents |
查看 inode 使用情况 | ls -i /path/to/directory | ls -i /home/user |
1.4 文件操作
操作 | 命令及选项 | 示例 |
---|---|---|
创建文件 | touch filename / echo text > file | touch myfile.txt |
查看文件内容 | cat / less / head / tail | less myfile.txt |
编辑文件 | nano / vi / vim | nano myfile.txt |
复制文件 | cp source_file target_file | cp file1.txt /backup/ |
移动或重命名文件 | mv source_file target_file | mv oldfile.txt newfile.txt |
删除文件 | rm filename | rm myfile.txt |
查找文件 | find /path -name "filename" | find /home/user -name "*.txt" |
比较文件 | diff file1 file2 | diff file1.txt file2.txt |
查看文件元数据 | stat filename | stat myfile.txt |
创建硬链接或符号链接 | ln / ln -s | ln -s file1.txt link.txt |
1.5 gcc命令
选项 | 功能 | 示例 |
---|---|---|
gcc source.c -o output | 编译源代码并生成可执行文件 | gcc hello.c -o hello |
-g | 生成调试信息 | gcc -g hello.c -o hello |
-O0 / -O1 / -O2 / -O3 | 优化级别(-O0 无优化,-O3 高级优化) | gcc -O2 hello.c -o hello |
-Wall | 启用所有常见的警告 | gcc -Wall hello.c -o hello |
-L<path> -l<lib> | 指定库路径并链接库文件 | gcc hello.c -L/usr/lib -lm |
-I<path> | 指定额外的头文件路径 | gcc -I/usr/include hello.c |
-c | 只编译源文件,生成目标文件(.o) | gcc -c hello.c |
-E | 只进行预处理,输出预处理后的结果 | gcc -E hello.c |
-v | 显示编译过程详细信息 | gcc -v hello.c -o hello |
1.6 shell脚本
语法/概念 | 示例 | 说明 |
---|---|---|
Shebang | #!/bin/bash | 指定解释器 |
注释 | # 这是注释 | # 后的内容是注释,Shell 会忽略它 |
变量 | name="Jordan" | name 是变量名,Jordan 是变量值 |
条件语句(if) | if [ $1 -gt 10 ]; then | 判断条件并执行不同的命令 |
循环(for/while) | for i in 1 2 3; do echo $i; done | 遍历列表或条件,执行重复的命令 |
函数 | function_name() { ... } | 自定义函数,可传参并返回值 |
文件操作 | if [ -f "file.txt" ]; then | 判断文件是否存在 |
退出脚本 | exit 0 | 退出脚本并返回指定的退出状态码 |
1.6.1 常见条件测试操作符
-
-eq
:等于 -
-ne
:不等于 -
-lt
:小于 -
-le
:小于或等于 -
-gt
:大于 -
-ge
:大于或等于 -
-z
:字符串为空 -
-n
:字符串非空
1.6.2 shell高级语法之case xx in ...esac
case是shell中一种条件分支语句,用于根据不同的值或模式执行不同的代码块。它的语法类似于其它编程语言中的switch语句。case语句通常用于多条件判断,特别适合处理多个可能的输入或选项。
1.7 Makefile的编写
Makefile是用来控制项目自动化构建的工具,它基于文件的依赖关系来决定哪些文件需要更新。make是一个工具,利用Makefile中定义的规则,自动化的管理源代码的编译和构建过程。它通过检查文件的“时间戳”,决定是否需要重新构建目标。
1.7.1 Makefile 基本工作原理
1.7.2 典型的工作流程
1.7.3 示例:Makefile的工作原理
假设有以下Makefile:
makefile#目标1: main.o 依赖与main.c 和 utils.h
main.o: main.c utils.hgcc -c main.c -o main.o#目标2: program 依赖于 mian.o 和 utils.o
program: main.o utils.ogcc $^ -o $@