C语言
文章平均质量分 67
疯子°没有欲望
一起探索,一起学习,一起进步!
展开
-
快速排序代码及逻辑思想
快速排序法:思想:首先分别把头尾两个数确定住,用left 和 right 表示,并确定数组元素的个数,然后将头尾的数分别给 a[i] 和 a[j],然后从尾部开始去找比a[left] 小的数,满足就退出,同时满足i(必须要),然后在头部开始找比大的数,满足a[i]并满足i就退出循环,两者退出循环后,在把这俩个的值进行交换,在判断i和j的大小,直到i=j时退出主循环,然后把a原创 2017-10-17 22:24:02 · 1197 阅读 · 0 评论 -
进程间的通信---信号灯
信号灯,也叫信号量,它是不同进程间或一个给定进程内部不同线程间同步机制。信号灯的使用一般配合共享内存使用,用以实现同步和互斥;编写步骤:1.使用ftok()函数获取key值;2.使用semget()函数创建一个信号灯;(注:在这之前必须要把共享内存创建好,具体方法上篇博客有详细方法)3.使用semctl()函数初始化信号量,(注:在这之前要先定义一个共用体,在Linux里可以通原创 2017-11-17 22:21:47 · 819 阅读 · 0 评论 -
进程、线程的优缺点
进程概念 进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。 在Mac、Windows NT等采用微内核结构的操作系统中,进程的功转载 2017-11-28 18:46:20 · 6316 阅读 · 3 评论 -
进程间的通信----socket通信
socket通信是一种双向的进程间通信方式;主要实现流程是3次握手;服务端代码:客户端:原创 2017-11-19 22:07:56 · 277 阅读 · 0 评论 -
进程间的通信---共享内存
共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝;但是在使用共享内存时,可能会出现多个进程共享一段内存,因此要依靠某种同步机制解决,如:互斥锁,信号量;实现共享内存的四大步骤:1.创建或打开共享内存;2.映射共享内存,即把指定的共享内存映射到进程的地址空间用于访问;3.撤销共享内存映射;4.删除共享内存对象;示例代码如下:读端:原创 2017-11-15 22:47:24 · 303 阅读 · 1 评论 -
进程间的通信---消息队列
消息队列:队列是先进先出,把写入的消息按队列的方式排列,然后读取消息时按队列性质读取,或按指定的类型号读取;实现消息队列的步骤:1.获取key值,2.创建消息队列,取得消息队列的ID;3.向消息队列里写入消息;4.读取消息队列的消息;5.删除消息队列;读端代码:#include #include #include #include #incl原创 2017-11-16 22:18:07 · 229 阅读 · 0 评论 -
c语言中realloc()函数解析
realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。如果将分配的内存减少,realloc仅仅是改变索引的信息。如果是将分配的内存扩大,则有以下情况:1)如果当前内存段后面有需要的内存空间,则直接扩展这段内存空间,realloc()将返回原指针。2)如果当前内存段后面的空闲字节不够,转载 2018-03-13 10:20:59 · 393 阅读 · 0 评论 -
实现简单的printf函数
首先,要介绍一下printf实现的原理printf函数原型如下:int printf(const char* format,…);返回值是int,返回输出的字符个数。例如:int main(){ int n; n=printf(“hello world,%d\n”,100); printf(“返回值:%d\n”,n); return 0;}测试结果:hello w...转载 2018-12-08 20:25:15 · 651 阅读 · 0 评论 -
Linux下的静态库和动态库的使用和制作
1.库在本质上可以说是一个可执行的二进制文件。两者的区别:静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。2.静态库:静态库的名字一般是libxxx.a,xxx为库的名字。利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易原创 2017-09-03 12:08:54 · 250 阅读 · 0 评论 -
二维数值与指针
在讨论二维指针时,我们可以把二维指针看成由多个一维指针构成,然后对他进行理解。由一个简单的表格:该图表示二维数组地址、二维数组名、一维数组地址、一维数组名、元素地址、元素的关系图:他们之间的关系:二维数组地址代表这个二维数组的地址,二维数组名表示二维数组名同时也存储了一维数组的地址,一维数组名也存储了元素的地址,(注:二维数组的地址和一维数组的地址和数组首个元素的地址他原创 2017-08-17 22:14:00 · 3137 阅读 · 0 评论 -
数据库的命令及函数接口
数据库的基本命令:1.sqlite>.tables 显示数据库的表名2.sqlite>.quit 退出数据库3.sqlite>.hearers on 查看数据表时,可以带标题的参看4.sqlite>.mode column 将表的标题与表中记录用线分开5.sqlite>select * from ; 查询表中所有记录,(注:命令后面的分号一定不原创 2017-10-14 09:36:36 · 613 阅读 · 1 评论 -
shell编程自我总结
Shell编程基础:1.编程语言分为:编译型语言和解释型语言。编译型语言:C语言,Java语言解释型语言:shell脚本shell脚本的本质:shell命令的有序集合。2.shell编程的基本过程第一步:建立shell脚本文件,一般后缀是 .sh 。第二步:给脚本文件赋予执行权限; chmod u+x 文件名.sh第三步:执行当前目录下的脚本文件。./文件原创 2017-10-04 17:05:52 · 311 阅读 · 0 评论 -
进程、、、
1.进程属性进程与程序:程序:磁盘文件,格式:elf readelf a.out进程:elf文件执行过程,4G虚拟空间,代码+初始化数据段+未初始化数据段+堆+栈+env,命令行参数进程状态 '进程上下文:context(PC,reg,堆栈指针等)进程模式 :用户模式 :空间地址0x0000 0000 -0xbfff ffff 3G空间,资源访问受限。内核模式 :原创 2017-09-16 09:39:43 · 164 阅读 · 0 评论 -
创建一个通讯录小项目代码
项目描述:编写简易通讯录(使用“链表”这种存储结构)功能:1、使用链表存储联系人的相关信息,包括姓名、性别、电话号码、注释等,链表形式不限(推荐使用单链表,推荐事先准备一些数据)2、有输出通讯录全部信息的功能3、有清空通讯录的功能4、有用户交互界面5、有插入新联系人信息的功能6、有查找联系人的功能,包括“按姓名查找”和“按电话号查找”两种7、有删除联系人的功能,原创 2017-08-29 21:01:52 · 581 阅读 · 0 评论 -
typedef 和 define 的用法
1.typedef常见用法1.常规变量类型定义例如:typedef unsigned char uchar描述:uchar等价于unsigned char类型定义 uchar c声明等于unsigned char c声明2.数组类型定义例如: typedef int array[2];描述: array等价于 int [2]定义; array a声明等价于int原创 2017-08-20 11:03:57 · 310 阅读 · 0 评论 -
一维数值与指针的问题关系
一维数组与指针: 例如:int a[5]={1,3,5,7,9}; 数组名:1.代表整个数组,sizeof(a)求数组整体的大小,&a,取整个数组的地址; 2.代表第一个元素的地址,即a==&a[0];是一个地址常量。元素的表示方法(指针):原创 2017-08-14 19:25:45 · 305 阅读 · 0 评论 -
解决虚拟机不能上网问题
虚拟机不能上网可能是你没有把你的网设置成NET模式, 这里有几种方法给你参考, 第一种:你必须把你的网络模式改成NET模式,然后在编辑中的虚拟网络编辑器中把你的网络恢复到默认设置,等待虚拟机给你重新分配IP地址, 第二种,直接在你的终端上输入sudo dhclient命令,等待虚拟机分配IP地址。原创 2017-08-10 19:49:00 · 801 阅读 · 1 评论 -
如何将你的虚拟机改成汉化版的虚拟机
前提:你的虚拟机要能上网,如何检查你的虚拟机是否能够上网,第一步:在终端上输入命令 ping 114.114.114.114看能否ping通,第二步:在ping通的基础上在ping www.baidu.com,如果两者都能ping通,那么你的虚拟机就可以上网了。注:若你的虚拟机不能上网,请看我的另一篇博客教你如何使你的虚拟机能够上网。汉化步骤: 第一步:更改你的服务器地址(原创 2017-08-09 18:50:22 · 30724 阅读 · 2 评论 -
单向链表
1.单向链表:在链表把同一类型的结构体变量看成一个节点,用节点来表示每个同类型结构体变量,而每个节点中有一个数据域和一个指针域(单向链表),在双向链表中,每个节点中有一个prior域,一个数据域,一个指针域。节点:指针域存放着下一个结构体的地址。指针域:里面存放的是下一个节点(结构体变量)的地址,数据域:里面存放的是该结构体变量的数据。prior域:里面存放的是钱一个节点的地址原创 2017-09-23 14:57:48 · 397 阅读 · 0 评论