# LinuxC编程从基础到实践 **Repository Path**: wangwang2020/linuxca2z ## Basic Information - **Project Name**: LinuxC编程从基础到实践 - **Description**: LinuxC编程从基础到实践 Programming from foundation to practice - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2020-07-30 - **Last Updated**: 2024-11-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LinuxC编程从基础到实践 ## 介绍   Linux是在 Unix的基础上发展起来的一套可以免费使用和自由传播的操作系统,从 1991年问世至今已经走过了 20多年的历史,Linux从一个简单架构的系统内核发展到了现在结构完整、功能丰富的多版本用户系统,已经成为现今世界上最流行的操作系统之一,其不仅能在 PC机和服务器上运行,随着嵌入式系统的发展, Linux操作系统已经被广泛应用于各种场合。 本书共 13章,可以分为 6个部分,基于 Ubuntu 12.04由浅入深地介绍了在 Linux下使用 C语言进行系统开发的基础知识,包括文件和流操作、进程/线程的操作和同步、网络编程、图形界面编程等,并给出了大量实例,同时在本书可下载资源中还搭配了 10多个小时的相应视频讲解,以帮助读者完成从入门到进阶的提升。 本书既有 Linux的基础知识介绍,又包含了丰富的应用实例,适合有 C语言基础和 Linux操作系统基础的工程师学习,以及高等院校计算机相关专业的学生和其他爱好者阅读。 ![](.\video\Snipaste_20200730_17_00_01.png) ## 目录 ``` 封面 -14 书名 -13 版权 -12 前言 -11 目录 -9 第1章 Linux使用基础/1 1 1.1 Linux发展大事记/1 1 1.2 Linux的特点/4 4 1.3 Linux的几个相关术语/5 5 1.3.1 GNU/5 5 1.3.2 GPL/5 5 1.3.3 POSIX/6 6 1.3.4 ISO C/6 6 1.4 Linux的体系结构/6 6 1.4.1 Linux的内核/6 6 1.4.2 Linux的命令解释层/7 7 1.4.3 Linux的文件系统/7 7 1.4.4 Linux的应用软件/8 8 1.5 Linux的内核版本和发行版本/8 8 1.5.1 Linux的内核版本/9 9 1.5.2 Linux的发行版本/10 10 1.6 Linux的包管理/14 14 1.7 Linux的人机交互/16 16 1.7.1 图形界面/16 16 1.7.2 shell/18 18 1.8 shell的使用/22 22 1.8.1 shell命令的标准格式/22 22 1.8.2 shell的通配符/23 23 1.8.3 shell中的引号/24 24 1.8.4 shell中的注释符/26 26 1.9 Linux的常用命令/26 26 1.9.1 目录操作命令/26 26 1.9.2 文件操作命令/28 28 1.9.3 其他命令/35 35 1.10 本章习题/41 41 第2章 在Linux下进行C语言开发/42 42 2.1 C语言的特点和开发流程/42 42 2.2 Linux下的C语言开发工具/43 43 2.3 Linux C语言的代码编辑工具/44 44 2.3.1 vim/44 44 2.3.2 Emacs/52 52 2.3.3 gedit/52 52 2.3.4 在Linux中编辑C语言代码文件的应用实例/53 53 2.4 Linux C语言的编译器gcc/55 55 2.4.1 gcc的安装和配置/55 55 2.4.2 gcc对C语言的处理过程/56 56 2.4.3 gcc的基础使用方法/58 58 2.4.4 gcc的应用实例/59 59 2.5 Linux C语言的调试工具gdb/60 60 2.5.1 gdb的基础使用/61 61 2.5.2 gdb运行模式的选择/63 63 2.5.3 gdb应用实例/63 63 2.6 Linux C语言的项目管理工具make/64 64 2.6.1 make项目管理器的基础/64 64 2.6.2 make项目管理器的使用/69 69 2.6.3 make项目管理器的应用实例/70 70 2.7 Linux中的C语言应用代码/73 73 2.7.1 C语言代码的运行机制/73 73 2.7.2 C语言代码的程序存储空间/75 75 2.7.3 C语言代码的main函数和参数/76 76 2.7.4 C语言代码的出错处理/78 78 2.7.5 C语言代码的标准输入和输出函数/83 83 2.7.6 C语言代码的时间处理/85 85 2.7.7 C语言代码的分配机制/89 89 2.7.8 C语言代码的系统调用和库函数/90 90 2.8 本章习题/91 91 第3章 Linux文件的基础操作/92 92 3.1 Linux的文件/92 92 3.1.1 Linux的文件类型/93 93 3.1.2 Linux的文件结构和文件描述符/95 95 3.2 Linux的文件基础操作/96 96 3.2.1 打开和关闭文件/96 96 3.2.2 创建文件/101 101 3.2.3 将数据写入文件/103 103 3.2.4 在文件中进行定位操作/113 113 3.2.5 从文件中读出数据/119 119 3.3 文件基础操作的综合应用——定时创建文件并且写入数据/122 122 3.3.1 综合应用的需求说明和分析/123 123 3.3.2 秒定时的实现/123 123 3.3.3 将当前时间信息写入文件/126 126 3.3.4 使用时间信息作为文件名/129 129 3.4 本章习题/134 134 第4章 Linux的目录文件操作/135 135 4.1 目录文件的基础操作/135 135 4.1.1 目录文件的创建和删除/135 135 4.1.2 目录文件的打开、关闭和读取/140 140 4.1.3 当前工作目录路径/147 147 4.2 目录文件的综合应用——定时创建目录和文件/150 150 4.2.1 综合应用的需求分析/150 150 4.2.2 使用时间信息生成目录和文件/150 150 4.2.3 定时创建目录和文件/153 153 4.3 本章习题/156 156 第5章 Linux的文件系统和文件属性/157 157 5.1 Linux的文件系统和文件属性基础/157 157 5.1.1 Linux的文件系统/158 158 5.1.2 Linux的文件系统结构/160 160 5.1.3 Linux的文件和文件属性/164 164 5.2 Linux文件属性的操作方法/166 166 5.2.1 判断文件类型/166 166 5.2.2 文件的时间信息/170 170 5.2.3 文件的权限/174 174 5.2.4 修改文件的名称/183 183 5.2.5 删除文件/185 185 5.3 Linux的链接文件/187 187 5.3.1 链接文件基础/187 187 5.3.2 硬链接操作函数/188 188 5.3.3 符号链接操作函数/188 188 5.4 文件的其他操作/190 190 5.4.1 dup和dup2函数/190 190 5.4.2 fcntl函数/192 192 5.4.3 truncate和ftruncate函数/195 195 5.5 本章习题/195 195 第6章 Linux的流/196 196 6.1 Linux的流基础/196 196 6.1.1 流和文件的关系/196 196 6.1.2 流的结构和操作流程/197 197 6.1.3 标准流介绍/199 199 6.2 流的基础操作/199 199 6.2.1 打开和关闭流/199 199 6.2.2 读写流/205 205 6.2.3 流的出错处理/217 217 6.2.4 流的定位/220 220 6.2.5 流的缓冲管理/224 224 6.2.6 流的冲洗/231 231 6.3 流的格式化输入和输出/231 231 6.3.1 流的格式化输出/232 232 6.3.2 流的格式化输入/232 232 6.3.3 流的格式化参数/233 233 6.3.4 流的格式化输入输出操作实例/236 236 6.4 本章习题/241 241 第7章 Linux的进程/243 243 7.1 操作系统和进程/243 243 7.1.1 进程的特点/243 243 7.1.2 进程和可执行文件(程序)的区别/244 244 7.2 Linux的进程基础/244 244 7.2.1 Linux进程的基础属性/244 244 7.2.2 Linux的进程标识方法/247 247 7.2.3 Linux的进程调度/251 251 7.2.4 Linux下的进程执行流程/252 252 7.3 Linux的进程操作/252 252 7.3.1 使用fork函数来创建进程/252 252 7.3.2 执行进程/264 264 7.3.3 使用vfork函数创建并且执行进程/271 271 7.3.4 退出进程/274 274 7.3.5 销毁进程/279 279 7.3.6 Linux的进程操作总结/281 281 7.4 进程综合应用——使用多个进程创建文件/283 283 7.5 Linux的进程组和会话/286 286 7.6 Linux进程的其他操作/290 290 7.6.1 更改进程用户/290 290 7.6.2 在进程中调用其他应用程序/292 292 7.6.3 统计进程状态/295 295 7.6.4 进程的执行时间/297 297 7.7 本章习题/301 301 第8章 Linux的信号/302 302 8.1 Linux的信号机制/302 302 8.1.1 信号的工作方式/302 302 8.1.2 信号的分类和说明/305 305 8.2 Linux信号的使用方法/308 308 8.2.1 注册信号/309 309 8.2.2 发送信号/314 314 8.2.3 定时信号/325 325 8.2.4 退出信号/326 326 8.3 Linux的信号集/327 327 8.4 信号的高级操作/328 328 8.4.1 信号的阻塞和挂起/328 328 8.4.2 信号的精确定时/329 329 8.4.3 可重入函数/331 331 8.5 本章习题/332 332 第9章 Linux的进程同步机制——管道和IPC/333 333 9.1 Linux的管道/333 333 9.1.1 管道的基本概念/333 333 9.1.2 管道的实现方法/334 334 9.1.3 管道的读写操作规则/335 335 9.1.4 管道的特点/336 336 9.2 Linux的管道操作/336 336 9.2.1 管道的创建/336 336 9.2.2 进程的管道通信/338 338 9.2.3 管道的高级应用/347 347 9.3 Linux的命名管道/350 350 9.3.1 命名管道的基本概念/350 350 9.3.2 命名管道的工作方式/350 350 9.4 Linux的命名管道操作/354 354 9.4.1 创建命名管道/354 354 9.4.2 读写命名管道/355 355 9.4.3 进程使用命名管道通信/356 356 9.5 Linux的System V IPC机制/359 359 9.5.1 System V IPC的标识符和关键字/360 360 9.5.2 System V IPC的结构和权限/361 361 9.5.3 System V IPC的特点/364 364 9.6 Linux的消息队列/365 365 9.6.1 消息队列基础/365 365 9.6.2 消息队列的操作/367 367 9.7 Linux的信号量/377 377 9.7.1 信号量的基础/377 377 9.7.2 信号量的操作/379 379 9.8 Linux的共享内存/383 383 9.8.1 共享内存的基础/383 383 9.8.2 共享内存的操作/384 384 9.8.3 共享内存的应用实例/387 387 9.9 本章习题/390 390 第10章 Linux的线程/391 391 10.1 Linux的线程基础/391 391 10.1.1 线程的特点/391 391 10.1.2 控制线程和线程的标识符/392 392 10.1.3 用户态和核心态线程/393 393 10.1.4 使用gcc编译线程的相关代码/393 393 10.2 Linux的线程操作/393 393 10.2.1 创建线程/394 394 10.2.2 阻塞和退出线程/397 397 10.2.3 取消和清理线程/400 400 10.2.4 分离线程/401 401 10.3 线程的属性/402 402 10.3.1 线程属性对象的初始化和销毁函数/403 403 10.3.2 线程堆栈大小相关函数/403 403 10.3.3 线程堆栈地址函数/404 404 10.3.4 线程的分离状态函数/404 404 10.3.5 线程的作用域函数/404 404 10.3.6 线程的继承调度函数/405 405 10.3.7 线程的调度策略函数/405 405 10.3.8 线程的调度参数函数/405 405 10.3.9 使用线程的属性/406 406 10.4 线程的私有数据/407 407 10.4.1 创建键函数/408 408 10.4.2 取消键关联函数/408 408 10.4.3 解决键冲突函数/408 408 10.4.4 键关联函数/409 409 10.4.5 线程私有数据地址获取函数/409 409 10.4.6 使用线程的私有数据/409 409 10.5 线程的同步/411 411 10.5.1 使用互斥锁解决线程同步/412 412 10.5.2 使用条件变量解决线程同步/415 415 10.6 本章习题/420 420 第11章 Linux的网络编程/422 422 11.1 Linux的网络通信模型/422 422 11.1.1 OSI网络模型/422 422 11.1.2 TCP/IP协议和其网络模型/423 423 11.1.3 客户端/服务器结构/426 426 11.1.4 Linux的端口和套接字/427 427 11.1.5 Linux套接字的结构定义/429 429 11.2 Linux的网络基础操作函数/430 430 11.2.1 字节顺序转换函数族/431 431 11.2.2 字节操作函数族/432 432 11.2.3 IP地址转换函数族/433 433 11.2.4 域名转换函数族/436 436 11.3 Linux的网络套接字操作函数/439 439 11.4 Linux的TCP编程/450 450 11.4.1 TCP基础/451 451 11.4.2 TCP的工作流程和应用/452 452 11.5 Linux的UDP编程/457 457 11.5.1 UDP的基础知识/457 457 11.5.2 UDP的工作流程和应用/457 457 11.6 应用实例——获取网络时间/461 461 11.7 本章习题/468 468 第12章 在Linux中进行基础图形编程/469 469 12.1 Linux图形编程基础/469 469 12.2 GTK+的基本使用方法/471 471 12.2.1 GTK+的常见数据类型/471 471 12.2.2 GTK+的常见函数前缀/472 472 12.2.3 一个最简单的GTK+窗口/472 472 12.2.4 GTK+的常见基础函数/473 473 12.2.5 GTK+的构件和容器/477 477 12.2.6 GTK+的回调函数/478 478 12.3 在GTK+中使用简单构件/480 480 12.3.1 按钮/481 481 12.3.2 触发按钮/482 482 12.3.3 复选框/484 484 12.3.4 单选框/485 485 12.3.5 组合盒/487 487 12.3.6 组合表/489 489 12.3.7 标签/491 491 12.3.8 输入框/493 493 12.3.9 箭头/496 496 12.3.10 标尺/498 498 12.4 在GTK+中使用组合构件/499 499 12.4.1 对话框/499 499 12.4.2 组合框/501 501 12.4.3 微调构件/503 503 12.4.4 日历构件/505 505 12.4.5 文件选择构件/508 508 12.4.6 按钮盒/511 511 12.4.7 框架/513 513 12.4.8 文本框/514 514 12.5 设计GTK+的菜单/517 517 12.5.1 建立菜单/518 518 12.5.2 菜单的信号处理/520 520 12.5.3 工具栏/521 521 12.6 使用Glade界面设计师/523 523 12.7 本章习题/524 524 第13章 Linux的C语言编程实战/525 525 13.1 实时风力数据采集仪PC机端软件设计/525 525 13.1.1 实时风力数据采集仪PC机端软件的需求分析/525 525 13.1.2 Linux下的串口编程基础/526 526 13.1.3 实时风力数据采集仪PC机端软件的代码设计/537 537 13.1.4 实时风力数据采集仪PC机端软件的记录数据/540 540 13.2 俄罗斯方块游戏设计/540 540 13.2.1 俄罗斯方块的需求分析/541 541 13.2.2 GTK+的图形设计进阶/541 541 13.2.3 俄罗斯方块的代码设计/548 548 13.2.4 俄罗斯方块游戏的运行/568 568 附录 习题答案/570 570 ```