本书以“学完C语言之后知道能做什么”为编写目标,共包括9章:Linux C语言程序设计简介、C语言基础I、C语言基础II、链表、C标准库、Linux系统调用、Socket编程、Pthreads编程、GTK图形界面编程。其中,C语言基础I、C语言基础II、C标准库、Linux系统调用为本书最基础最重要的四章,全面介绍了标准C的基本语法和Linux系统调用编程。其他章节告诉读者C语言具体能做什么。本书坚守“空谈无用,给我看代码(Linux之父所言)”信条,通过正确无误的示例代码向读者展示C语言的具体用法。本书内容注重实用、结构清晰、图文并茂,力求做到使读者在兴趣中学习Linux C语言编程。
C程序设计-基于Linux平台(微课版)
主 编:张同光
出版单位:清华大学出版社
ISBN:978-7-302-63731-8
ISBN:9787302637318
出版时间:2023.7
CIP:2023103823
¥59.00
《C程序设计(基于Linux平台)(微课版)》
内 容 简 介
本书以“学完C语言之后知道能做什么”为编写目标,共包括9章:Linux C语言程序设计简介、C语言基础I、C语言基础II、链表、C标准库、Linux系统调用、Socket编程、Pthreads编程、GTK图形界面编程。其中,C语言基础I、C语言基础II、C标准库、Linux系统调用为本书最基础最重要的四章,全面介绍了标准C的基本语法和Linux系统调用编程。其他章节告诉读者C语言具体能做什么。本书坚守“空谈无用,给我看代码(Linux之父所言)”信条,通过正确无误的示例代码向读者展示C语言的具体用法。本书内容注重实用、结构清晰、图文并茂,力求做到使读者在兴趣中学习Linux C语言编程。
本书适合作为高等学校各专业的C语言程序设计课程教材,也可作为从事计算机相关工作的科技人员、计算机爱好者及各类自学人员的参考书。
前 言
C语言是目前最为流行的高级程序设计语言之一,是许多计算机专业人员和计算机爱好者学习程序设计的首选语言。但是,好多学过C语言的读者在学习C语言之前以及学习过程中经常会问:“学习C语言能做什么?”。学完C语言之后感慨道:“学完C语言之后仍然不知道能做什么”。其实,编者认为学习C语言有两个目标,第一、为学习其他编程语言打下坚实的基础。因为计算机编程语言都是相通的,学好C语言再学习其他高级程序设计语言会很容易。这也是好多C语言教材能够达到的目标。所以那些学完C语言之后仍然不知道能做什么的读者已经具备了计算机编程基础了。本书第2、3、5、6章可以达到该目标。第二、真正使用C语言开发有实际意义的程序。这正是本书所追求的目标。希望使用C语言开发有实际意义的程序,就要清楚目前C语言的真正应用场景。目前市面上绝大多数操作系统都是用C语言编写的。很多基础软件,如编译器、数据库、虚拟机、多媒体库、图形库等,也都是用C语言实现的。很多流行的编程语言也是用C语言实现的,如Lua、Python脚本语言等。在嵌入式系统开发中,比如固件、BSP、内核驱动等,除了少量的汇编代码,大部分都是用C语言开发的。互联网中的好多服务器程序也是用C语言开发的。总之,在整个计算机软件世界中,C语言发挥着中流砥柱的作用。
读者可能对Linux不熟悉,但是,Linux早已深刻影响着我们生活的方方面面,从超级计算机、巨型机,到手机(Android),再到各种家电和嵌入式设备,内部都运行着Linux。另外,Linux支撑起了整个因特网。C语言和Linux操作系统有着密不可分的血缘关系,因此本书的主要目标是帮助读者掌握基于Linux的各种软件的C语言开发方法。为读者以后步入广阔无垠的Linux世界打下坚实的基础。本书所有示例代码都是正确无误的。考虑到有些读者之前没有接触过Linux操作系统,因此,读者可以根据本书的第一个视频安装Linux虚拟机,搭建好Linux C语言编程环境。
本书提供配套课件、教学大纲和习题参考答案等多种教学资源,还提供了75个教学视频,读者在学习的过程中,扫描教学视频二维码可以观看视频。
三级目录
第1章 Linux C语言程序设计简介 1
1.1 C语言 1
1.1.1 C语言简介 1
1.1.2 C语言发展历史 2
1.1.3 C语言特点 2
1.1.4 为什么要学习Linux C语言编程 3
1.2 Linux简介 4
1.3 Linux C语言程序设计 4
1.3.1 Linux应用编程、系统编程和内核编程 4
1.3.2 Linux图形界面编程 5
1.4 Linux C语言编程环境 5
1.4.1 安装Ubuntu Linux虚拟机 5
1.4.2 gedit、vim和nano 6
1.4.3 C语言编译器及集成开发环境 7
1.4.4 编写Hello World程序 7
1.5 使用gcc编译程序 8
1.6 使用make和Makefile构建程序 9
1.7 使用cmake和CMakeLists.txt构建程序 14
1.8 完整的编译过程 16
1.9 习题 17
第2章 C语言基础I 1
2.1 数据 1
2.1.1 数据类型 1
2.1.2 常量 3
2.1.3 变量和标识符 4
2.1.4 数据类型转换 5
2.1.5 转义字符(转义序列) 7
2.2 运算符 8
2.2.1 运算符和表达式 8
2.2.2 算术运算 10
2.2.3 赋值运算 10
2.2.4 关系运算 11
2.2.5 逻辑运算符 11
2.2.6 条件运算符 12
2.2.7 逗号运算符 13
2.2.8 sizeof运算符与typedef类型声明 13
2.2.9 位运算 14
2.2.10 复合赋值运算符 15
2.3 结构化程序设计 15
2.3.1 顺序结构 16
2.3.2 分支结构 16
2.3.3 循环结构 18
2.4 输入输出 21
2.4.1 标准输出函数printf 22
2.4.2 标准输入函数scanf 24
2.5 数组 26
2.5.1 一维数组 26
2.5.2 二维数组 27
2.5.3 一维字符数组 28
2.5.4 一维字符数组的输入输出 29
2.5.5 字符串处理函数 29
2.5.6 二维字符数组 31
2.12 习题 31
第3章 C语言基础II 1
3.1 函数 1
3.1.1 函数定义和声明 1
3.1.2 函数调用及参数传递 2
3.1.3 函数的嵌套与递归 6
3.1.4 回调函数 6
3.1.5 return语句 7
3.1.6 全局变量、局部变量和作用域 7
3.1.7 变量的存储类别及生存期 8
3.1.8 内部函数和外部函数 11
3.2 预处理 11
3.2.1 预处理的步骤 11
3.2.2 宏定义和内联函数 12
3.2.3 条件编译 14
3.2.4 文件包含 15
3.3 指针 15
3.3.1 指针的基本运算 16
3.3.2 指针与数组 19
3.3.3 指针与const限定符 22
3.3.4 指针与字符串 22
3.3.5 指针函数与函数指针 23
3.3.6 再讲回调函数 24
3.3.7 可变参数 25
3.3.8 二级指针与多级指针 26
3.3.9 指针数组和数组指针 27
3.3.10 动态内存管理 28
3.4 结构体、共用体和枚举 30
3.4.1 结构体 30
3.4.2 位域 31
3.4.3 共用体 32
3.4.4 枚举 33
3.5 零长数组、变长数组和动态数组 34
3.6 编码风格与缩进工具indent 36
3.7 习题 37
第4章 链表 1
4.1 单向链表 1
4.1.1 单链表结构与链表结点类型 1
4.1.2 创建单链表 2
4.1.3 插入结点 3
4.1.4 删除结点 3
4.1.5 读取结点 4
4.1.6 查找结点 4
4.1.7 打印单链表 4
4.1.8 逆转单链表 5
4.1.9 构建单向循环链表 5
4.1.10 销毁单链表 5
4.1.11 主函数及测试结果 6
4.2 双向链表 7
4.2.1 双链表结构与链表结点类型 7
4.2.2 创建双链表 7
4.2.3 插入结点 9
4.2.4 删除结点 9
4.2.5 读取结点 10
4.2.6 查找结点 10
4.2.7 打印双链表 10
4.2.8 逆转双链表 11
4.2.9 构建双向循环链表 11
4.2.10 销毁双向循环链表 12
4.2.11 主函数及测试结果 12
4.3 内核链表 13
4.3.1 list_head 13
4.3.2 offsetof、container_of和list_entry 14
4.3.3 链表初始化 15
4.3.4 插入结点 15
4.3.5 删除结点 16
4.3.6 替换结点 16
4.3.7 移动结点 17
4.3.8 判断函数 17
4.3.9 合并结点 17
4.3.10 遍历链表 18
4.3.11 用户空间使用内核链表 19
4.4 习题 21
第5章 C标准库 1
5.1 C语言标准和glibc 1
5.2 标准输入输出函数库(stdio.h) 2
5.2.1 fopen/fclose 2
5.2.2 stdin/stdout/stderr 4
5.2.3 errno与perror函数 5
5.2.4 以字节为单位的I/O函数 7
5.2.5 以字符串为单位的I/O函数 8
5.2.6 以记录为单位的I/O函数 10
5.2.7 格式化读写文件 11
5.2.8 操作读写位置的函数 12
5.2.9 FILE结构体及I/O缓冲区 14
5.3 标准工具函数库(stdlib.h) 17
5.3.1 动态内存分配与释放 17
5.3.2 整数算术 19
5.3.3 随机数 20
5.3.4 数值字符串转换 21
5.3.5 宽字符和多字节字符转换 22
5.4 字符串处理函数库(string.h) 25
5.4.1 初始化字符串 26
5.4.2 取字符串的长度 26
5.4.3 复制字符串 27
5.4.4 比较字符串 28
5.4.5 搜索字符串 29
5.4.6 连接字符串 30
5.4.7 分割字符串 30
5.4.8 本地函数 32
5.5 字符处理函数库(ctype.h) 34
5.6 数学函数库(math.h) 35
5.7 学生信息管理系统的设计与实现 37
5.7.1 系统设计要求 37
5.7.2 系统设计 38
5.7.3 函数设计 38
5.7.4 参考程序 40
5.7.5 运行结果 43
5.8 习题 44
第6章 Linux系统调用 1
6.1 C库函数和Linux系统调用 1
6.2 进程管理 2
6.3 进程间通信 5
6.4 exec函数族 7
6.5 文件管理 10
6.6 习题 16
第7章 Socket编程 1
7.1 Socket基本概念 1
7.1.1 Socket是什么 1
7.1.2 网络字节序与主机字节序 2
7.1.3 Socket地址结构 3
7.1.4 地址转换函数 5
7.1.5 C/S架构 6
7.2 基于TCP协议的网络程序 6
7.2.1 简单C/S应用程序的设计 7
7.2.2 交互式C/S应用程序的设计 12
7.2.3 简单聊天室应用程序的设计(select) 14
7.2.4 聊天室应用程序的设计(select) 19
7.2.5 简单C/S应用程序的设计(epoll) 25
7.3 基于UDP协议的网络程序 29
7.3.1 简单C/S应用程序的设计 29
7.3.2 简单聊天室应用程序的设计 32
7.4 原始套接字编程 34
7.5 UNIX Domain Socket 37
7.6 习题 39
第8章 Pthreads编程 1
8.1 Pthreads概述 1
8.1.1 Linux进程和线程 1
8.1.2 Linux线程模型 2
8.1.3 Pthreads概述 2
8.2 Pthreads函数 3
8.2.1 创建线程 3
8.2.2 线程同步与互斥 7
8.3 Pthreads编程示例 9
8.3.1 读者写者 9
8.3.2 生产者消费者 12
8.3.3 哲学家就餐 13
8.4 习题 15
第9章 GTK图形界面编程 1
9.1 GTK简介 1
9.2 GLib简介 2
9.3 信号和回调函数 2
9.4 GTK控件 4
9.4.1 非容器控件 4
9.4.2 容器控件 4
9.5 GTK图形界面编程 5
9.5.1 Hello World 5
9.5.2 GtkGrid 7
9.5.3 Custom Drawing 9
9.5.4 GtkBuilder创建界面 11
9.5.5 Cambalache 14
9.6 GTK图形界面聊天室 16
9.6.1 聊天室服务器端 16
9.6.2 聊天室客户端 20
9.6.3 测试 27
9.7 习题 28
附录1 ASCII码表
附录2 资源及学习网站
参考文献