
Linux C一站式开发
喜欢打篮球的普通人
这个作者很懒,什么都没留下…
展开
-
(第35章)Linux系统编程之线程
文章目录一、线程的概念(1)线程和进程的区别(2)多线程的控制流程和信号处理函数控制流程的区别(3)线程共享的进程资源和独享的资源二、线程控制1.创建线程的相关函数2.eg2.终止线程(1)只终止某个线程而不终止整个进程的三个方法(2) pthread_exit(3)pthread_join(4)eg一、线程的概念(1)线程和进程的区别进程在各自独立的地址空间中运行,进程之间共享数据需要用...原创 2019-09-12 10:53:18 · 251 阅读 · 0 评论 -
(第34章)Linux系统编程之终端、作业控制与守护进程
文章目录一、终端1.终端的基本概念2.终端登录过程二、作业控制三、守护线程一、终端1.终端的基本概念(1)终端的基本知识在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal) 控制终端是保存在PCB中的信息,而我们知道fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个...原创 2019-09-05 23:19:31 · 315 阅读 · 0 评论 -
(第33章)Linux系统编程之信号
文章目录一、信号的基本概念一、信号的基本概念原创 2019-09-04 22:35:45 · 345 阅读 · 0 评论 -
(第28章)Linux系统编程之文件与IO
文章目录一、汇编程序的Hello world1.基础知识2.I/O操作是怎样通过系统调用传给内核?二、C标准I/O库函数与Unbuffered I/O函数1.C标准I/O库函数实现系统调用的过程2.C库函数与系统调用的层次关系3.C标准I/O库函数与直接调用底层的unbuffered I/O函数的区别?4.Unix标准(1)POSIX标准的前世今生(2)进程描述符,进程控制块PCB,文件描述符表(...原创 2019-09-02 22:01:30 · 295 阅读 · 0 评论 -
(第30章)Linux系统编程之进程
文章目录一、进程的基本知识1.进程控制块PCB2.系统调用fork和exec简介二、环境变量1.进程地址空间2.环境变量表也是一组字符串3.全局变量environ指向环境变量表,用environ指针可以查看所有环境变量字符串4.重要的环境变量:PATH,SHELL,TERM,LANG,HOME(2)getenv函数,setenv函数,unsetenv函数三、进程控制1.fork函数(2)fork函...原创 2019-09-02 22:00:57 · 195 阅读 · 0 评论 -
(第29章)LInuxC系统编程中的文件系统
文章目录原创 2019-08-15 08:50:34 · 269 阅读 · 0 评论 -
(第25章)LinuxC本质中C标准库
文章目录原创 2019-08-08 14:46:06 · 474 阅读 · 0 评论 -
(第24章)LinuxC本质中函数接口
文章目录原创 2019-08-08 14:45:25 · 213 阅读 · 0 评论 -
(第23章)LinuxC本质中指针
文章目录原创 2019-08-08 14:44:14 · 229 阅读 · 0 评论 -
(第22章)LinuxC本质中Makefile基础
文章目录原创 2019-08-08 14:43:34 · 320 阅读 · 0 评论 -
(第21章)LinuxC本质中预处理
文章目录原创 2019-08-08 14:42:47 · 247 阅读 · 0 评论 -
(第20章)LinuxC本质中多目标文件的链接、静态库、共享库、虚拟内存管理
文章目录一、多目标文件的链接1.将<用堆栈实现倒序打印>的代码拆成两个程序文件(1)编译(2)用 nm 命令查看目标文件的符号表:nm 目标文件(3)查看可执行文件的符号表:readelf -a 可执行文件(3)实际上链接的过程是由一个链接脚本(Linker Script) 控制的:默认链接脚本:ld --verbose二、定义和申明一、多目标文件的链接1.将<用堆栈实现倒序...原创 2019-08-01 10:36:42 · 462 阅读 · 0 评论 -
(第26章)LinuxC本质中链表、二叉树和哈希表
文章目录一、链表1.链表的结构2.链表的数组的区别3.链表的插入操作一、链表1.链表的结构结构体的递归定义stuct s{char data[6];struct s *next;};下图示意了由几个 struct s 结构体组成的链表,这些结构体称为链表的节点(Node)head 指针是链表的头指针,指向第一个节点。每个节点的 next 指针域指向下一个节点。最后一个节...原创 2019-06-29 23:16:12 · 487 阅读 · 0 评论 -
(第19章)LinuxC本质中汇编与C之间的关系
文章目录gcc 还提供了一种扩展语法可以在C程序中内嵌汇编指令,这在内核代码中很常见一、函数调用1.C语言的函数调用eg(1)(b)在所有函数中,ebp、esp寄存器的作用(2)使用gdb打印函数栈帧(a)函数栈帧的位置分布(b)为什么在 gdb 中可以用 bt 命令和 frame 命令查看每层栈帧上的参数和局部变量?gcc 还提供了一种扩展语法可以在C程序中内嵌汇编指令,这在内核代码中很常见...原创 2019-06-27 19:34:49 · 405 阅读 · 0 评论 -
(第18章)LinuxC本质中x86汇编程序基础
文章目录能看懂基本的汇编程序而不要求会写汇编程序一、最简单的汇编程序(2)如何运行汇编程序?(3)链接的作用:地址重定位,多文件合并成一个可执行文件(4)Shell中可以用特殊变量 $? 得到上一条命令的退出状态能看懂基本的汇编程序而不要求会写汇编程序一、最简单的汇编程序(1)代码如下(2)如何运行汇编程序?(3)链接的作用:地址重定位,多文件合并成一个可执行文件(4)Shell...原创 2019-06-23 15:25:30 · 465 阅读 · 0 评论 -
(第17章)LinuxC本质中计算机体系结构基础
文章目录原创 2019-06-22 22:51:23 · 237 阅读 · 0 评论 -
(第16章)LinuxC本质中运算符详解
文章目录一、位运算:重点学完本节之后你应该能自己写出UTF-8的编码和解码程序1.按位与、或、异或、取反运算二、移位运算1.移位的要求:移动的位数必须小于左操作数的总位数2.对于无符号数,二进制数左移一位相当于十进制数乘以23.对于无符号数,二进制数右移一位相当于十进制数乘除24.对于有符号数的右移而言5.建议只对无符号数做位运算一、位运算:重点学完本节之后你应该能自己写出UTF-8的编码和解...原创 2019-06-18 15:49:07 · 314 阅读 · 0 评论 -
(第15章)LinuxC本质中数据类型详解
文章目录一、整型1.我们常用的char型是无符号数还是有符号数?2.Implementation-defined、Unspecified和Undefined区别?3.通常的编译器实现遵守ILP32或LP64规范4.整数常量二、浮点型1.大部分平台的浮点数, float 型通常是32位, double 型通常是64位三、类型转换:了解有符号数和无符号数混用问题1.Integer Promotion2...原创 2019-06-18 15:09:42 · 387 阅读 · 0 评论 -
(第14章)LinuxC本质中计算机中数的表示
文章目录一、不同进制之间的换算1.二进制的最高位和最低位2.十进制转二进制:除二反序取余法3.八进制和十六进制4.整数的加减运算(1)Sign and Magnitude表示法(2)十进制的加减法(3)二进制减法方法1(用的少,0的表示不唯一,但是自己运算的速度快)(4)二进制减法方法2(用的多,但是自己的运算速度不快)5.有符号数和无符号数一、不同进制之间的换算1.二进制的最高位和最低位...原创 2019-06-12 00:07:56 · 317 阅读 · 0 评论 -
(第12章)LinuxC语言中栈、队列、DFS、BFS,循环队列
文章目录一、数据结构的概念二、堆栈(3)具体eg:用堆栈实现倒序打印(4)我们也可以写一个递归函数做倒序打印,利用函数调用的栈帧实现后进先出一、数据结构的概念数据的组织方式包含了存储方式和访问方式这两层意思,二者是紧密联系的数组的各元素是一个挨一个存储的,并且每个元素的大小相同,因此数组可以提供按下标访问的方式,结构体的各成员也是一个挨一个存储的,但是每个成员的大小不同,所以只能用.运算符...原创 2019-06-03 17:26:49 · 544 阅读 · 0 评论 -
(第11章)LinuxC语言中插入排序、归并排序、快速排序、线性查找和折半查找
文章目录一、算法的概念二、插入排序1.用玩扑克的方式解释插入排序2.插入排序的算法如下:(2)如何严格证明这个算法是正确的?一、算法的概念(1)算法(Algorithm) 是将一组输入转化成一组输出的一系列计算步骤,其中每个步骤必须能在有限时间内完成。(2)二、插入排序1.用玩扑克的方式解释插入排序要点在于:(1)前提:每次插入新的值时,前面的序列都是有序的(2)但和插入扑克牌...原创 2019-05-13 09:36:39 · 530 阅读 · 0 评论 -
(第10章)LinuxC语言中GDB调试
文章目录一、单步执行和跟踪函数调用1.gdb基本命令如下2.函数调试实例(1)原始代码如下(2)在编译时要加上 -g 选项,生成的可执行文件才能用 gdb 进行源码级调试(3)在(gdb)提示符下输入 help 可以查看命令的类别(4)也可以进一步查看某一类别中有哪些命令,例如查看 files 类别下有哪些命令可用(5)现在试试用 list 命令从第一行开始列出源代码(6)gdb 提供了一个很方便...原创 2019-05-04 18:17:58 · 343 阅读 · 0 评论 -
LinuxC语言中编码风格——以linux内核的编码风格为例
文章目录一、注释和空白一、注释和空白原创 2019-05-03 20:44:03 · 273 阅读 · 0 评论 -
LinuxC语言中的数组和rand函数和宏定义和全排列
文章目录一、数组也是一种复合数据类型1.数组的定义2.数组中的元素通过下标(或者叫索引,Index) 来访问。3.C语言中后缀运算符的优先级高于前缀运算符4.数组下标也可以是表达式,但表达式的值必须是整型的5.数组的初始化6.定义和访问数组—遍历的使用7.数组与结构体的显著区别一、数组也是一种复合数据类型1.数组的定义(1)说明:和结构体成员类似,数组 count 的4个元素的存储空...原创 2019-04-29 10:11:46 · 694 阅读 · 0 评论 -
LinuxC语言中的结构体和数据抽象和enum的使用(一步步的改进代码)
一、原创 2019-04-26 17:16:18 · 548 阅读 · 0 评论 -
LinuxC语言中的switch语句可被if语句代替
一、switch语句的格式如下:说明:(1)如果传入的参数是2,则从 case 2 分支开始执行,先是打印相应的信息,然后遇到 break 语句,它的作用是跳出整个 switch 语句块。(2)C语言规定各 case 分支的常量表达式必须互不相同,如果控制表达式不等于任何一个常量表达式,则从 default 分支开始执行,通常把 default 分支写在最后,但不是必须的。二、使用 s...原创 2019-04-26 10:21:25 · 1683 阅读 · 0 评论 -
LinuxC语言中goto语句如何替代?
一、goto语句的定义goto 语句,可以实现无条件跳转。goto 语句过于强大了,从程序中的任何地方都可以无条件跳转到任何其它地方,只要在那个地方定义一个标号就行。唯一的限制是 goto 只能跳转到同一个函数中的某个标号处。二、替代goto语句的写法通常 goto 语句只用于这种场合,一个函数中任何地方出现了错误条件都可以立即跳转到函数末尾做出错处理(例如释放先前分配的资源、...原创 2019-04-26 10:13:47 · 2446 阅读 · 0 评论 -
LinuxC语言中利用求1-100的素数来玩转break和continue
文章目录一、break和continue语句简介二、带有break和continue来求1-100的素数例子(2)不用break和continue怎么写?(3)循环嵌套怎么写?一、break和continue语句简介(1)for 语句的语法是:for (控制表达式1; 控制表达式2; 控制表达式3) 语句while循环是:(2)continue 语句也会终止当前循环,和 break 语...原创 2019-04-24 22:29:34 · 2219 阅读 · 0 评论 -
LinuxC语言中的死循环和 a+++++b 这个表达式如何理解?
(1)死循环for 语句的语法是:for (控制表达式1; 控制表达式2; 控制表达式3) 语句等价于while循环是:for (;1;) {…} 等价于 while (1) {…} 死循环C语言规定,如果控制表达式2为空,则认为控制表达式2的值为真,因此死循环也可以写成 for (; ; ) {…}(2)a+++++b 这个表达式如何理解?(3)C99规定了一种新的 for...原创 2019-04-24 20:30:57 · 626 阅读 · 0 评论 -
LinuxC语言中的递归和循环
文章目录一、用阶乘的例子来解释递归思想二、递归的定义三、图 5.2. factorial(3)的调用过程的解释,理解了以后直接用即可!别用此方法证明递归正确性四、推断递归函数的正确性的方法五、递归总结六、写递归的练习一、用阶乘的例子来解释递归思想二、递归的定义三、图 5.2. factorial(3)的调用过程的解释,理解了以后直接用即可!别用此方法证明递归正确性四、推断递归函...原创 2019-04-23 08:44:59 · 557 阅读 · 0 评论 -
LinuxC语言中的增量式(incremental)开发思路
文章目录一、题目需求5和分析如下:二、解决步骤如下:1.首先编写 distance 这个函数,可以先写一个简单的函数定义:2.可以测试这个函数定义是否有错3.继续写,并用打印语句测试函数4.继续写出最终的函数5.将其它函数写完6.如何组合所写函数来解决整个问题呢?三、总结:函数的分层设计假设要从头开始编写一个程序来解决问题一、题目需求5和分析如下:二、解决步骤如下:1.首先编写 dist...原创 2019-04-22 19:21:33 · 787 阅读 · 0 评论 -
LinuxC语言中关系运算符和相等性运算符
1.关系运算符和相等性运算符如下2.注意的点如下(1)这里的 == 表示数学中的相等关系,相当于数学中的=号,初学者常犯的错误是在控制表达式中把 == 写成=,在C语言中=号是赋值运算符,两者的含义完全不同。(2)如果表达式所表示的比较关系成立则值为真(True) ,否则为假(False)。(3)这些运算符的两个操作数应该是相同类型的,两边都是整型或者都是浮点型可以做比较,但两个字符串...原创 2019-04-22 15:41:23 · 1124 阅读 · 0 评论 -
Linux C语言中的全局变量初始化和局部变量初始化的异同
(1)C语言从语法上规定全局变量只能用常量表达式来初始化,因此下面这种全局变量初始化是不合法的:int minute = 360;int hour = minute / 60; (2)如果全局变量在定义时不初始化则初始值是0,如果局部变量在定义时不初始化则初始值是不确定的。所以,局部变量在使用之前一定要先赋值,如果基于一个不确定的值做后续计算肯定会引入Bug。参考:<Linux ...原创 2019-04-22 11:21:12 · 2415 阅读 · 0 评论 -
Linux C语言中的Man Pagec参考手册简介
(1)Man Page是Linux开发最常用的参考手册,由很多页面组成,每个页面描述一个主题,这些页面被组织成若干个Section。FHS(Filesystem Hierarchy Standard) 标准规定了Man Page各Section的含义如下:(2)注意区分用户命令和系统管理命令用户命令通常位于 /bin 和 /usr/bin 目录,一般用户可以执行用户命令系统管理命令通常位...原创 2019-04-22 10:52:43 · 887 阅读 · 0 评论 -
LinuxC语言中调用函数之前没有函数声明会怎么样?
1.代码如下:#include <stdio.h>int main(void){ printf("Three lines:\n"); threeline(); printf("Another three lines.\n"); threeline(); return 0;} void newline(void){ printf("\n");} void t...原创 2019-04-22 10:30:47 · 796 阅读 · 0 评论 -
Linux C语言中什么时候才算是分配存储空间
变量声明都是要分配存储空间的,因而都是定义,分配存储空间的函数声明可以称为函数定义;结构体开始我们会看到类型声明,声明一个类型是不分配存储空间的,所以“类型定义”和“类型声明”表示相同的含义总结一下:定义一个变量,就是分配一块存储空间并给它命名;给一个变量赋值,就是把一个值保存到这块存储空间中。...原创 2019-04-22 10:22:04 · 343 阅读 · 0 评论 -
linux C语言中关于main函数的注意事项
1.不应该写的main函数的形式如下2.应该写的main函数的形式如下参考:<Linux C 一站式编程>原创 2019-04-22 10:03:13 · 534 阅读 · 0 评论 -
LinuxC语言中函数库glibc简介
(1)要在一个平台上支持C语言,不仅要实现C编译器,还要实现C标准库,但是很多单片机的C语言开发工具中只有C编译器而没有完整的C标准库。(2)...原创 2019-04-22 09:46:41 · 771 阅读 · 2 评论 -
编译执行和解释执行的区别
文章目录一、二、编译执行过程如下:三、解释执行:shll脚本![在这里插入图片描述](https://img-blog.csdnimg.cn/20190421212453971.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTE0M...原创 2019-04-21 21:27:51 · 1812 阅读 · 0 评论