![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux C编程
文章平均质量分 73
yx_l128125
这个作者很懒,什么都没留下…
展开
-
关于 typedef & typedef struct & typedef union理解 --写给不长脑子的我
来源:http://zhidao.baidu.com/link?url=qxzkx5gaoCfnHnygYdzaLEWkC45JqNYYUk42eHHjB0yB3ZMgHv6lGjnq3CRfgQw8uJVesKck7ao7zT1HAQrWoa 写作原由,今晚再次查了typedef用法,就在这用着查着中做着一个个项目,可我还是记不住;脑子里装得是什么? 问题:请高手帮忙解释以下原创 2013-09-02 20:13:53 · 13731 阅读 · 1 评论 -
《大话数据结构》--学习笔记11 ***重点***
3.13 循环链表对于单链表,由于每个结点只存储了向后的指针,到了为标志就停止了向后链的操作,这样,当中某一结点就无法找到它的前驱结点了,就好像我们刚才说的,不能回到从前。 将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表。 循环链表的优点:解决了从当中一个结点出发,访问到链表的全部结点原创 2012-05-16 21:31:04 · 874 阅读 · 1 评论 -
《大话数据结构》--学习笔记9 ***重点***
3.9 单链表的整表创建单链表和顺序存储结构的区别:1.单链表不像顺序存储结构这么集中,它可以很散,是一种动态结构;2.对每个链表来说,它所占用空间的大小和位置是不需要预先分配划定的,可以根据系统的情况和实际的需求即时生成。 所建立单链表的过程就是一个动态生成链表的过程。即从“空表”的初始化状态起,依次建立各元素结点,并逐个插入链表。单链表整表创建的算法思路:1原创 2012-05-15 11:48:24 · 1081 阅读 · 0 评论 -
《大话数据结构》--学习笔记10 ***重点***
3.10 单链表的整表删除当我们不打算使用这个单链表时,我们需要把它销毁,其实也就是在内存中将它释放掉,以便留出空间给其他程序员或软件使用。单链表的整表删除的算法思路如下:1.声明一结点p和q;2.将第一个结点赋值给p;3.循环: & 将下一结点赋值给q; & 释放p; & 将原创 2012-05-15 16:27:27 · 773 阅读 · 0 评论 -
文件编程---那些年我们一起学习linux程序设计
一.Linux文件结构与UNIX一样,Linux环境中的文件具有特别重要的意义,因为它们的操作系统服务和设备提供了一个简单而统一的接口。在linux中一切皆文件。这就意味着,通常程序完全可以像使用文件那样使用磁盘文件、串行口、打印机和其他设备。1.目录 文件,除了本身包含的内容以外,它还会有一个名字和一些属性,即“管理信息”,例如文件的创建/修改 日期和它的访问权限等原创 2012-05-31 15:00:46 · 2855 阅读 · 0 评论 -
《大话数据结构》--学习笔记7
3.6 线性表的链式存储结构3.6.1 顺序存储结构不足的解决方法前面我们讲的线性表的顺序存储结构。它是有缺点的,最大的缺点是:插入和删除时需要移动大量元素,这显然需要耗费时间。能不能想办法解决?要解决这个问题,我们就得考虑一下导致这个问题的原因:为什么插入和删除时,就要移动大量元素,仔细分析,发现原因就在于相邻两元素的存储位置也具有相邻关系。它们的编号是1,2,3,...,n它们原创 2012-05-14 17:14:56 · 1179 阅读 · 0 评论 -
《大话数据结构》--学习笔记6
3.5 顺序存储结构的插入和删除3.5.1 获得元素操作对于线性表的顺序存储结构来说,如果要实现GetElem操作 【 即将线性表L中的第i个位置元素值返回】其实是非常简答的。就程序而言,只要i的数值在数组下标范围内,就是把数组第i-1个下标的值返回即可。来看代码:#define OK 1#define ERROR 0#define TRUE 1#defin原创 2012-05-14 15:41:28 · 752 阅读 · 0 评论 -
《大话数据结构》--学习笔记8 ***重点***
3.6.4 线性表链式存储结构代码描述单链表中,我们在C语言中可用结构指针来描述/*线性表的单链表存储结构*/typedef struct Node{ ElemType data; struct Node *next;}Node;typedef struct Node * LinkList; /*定义原创 2012-05-14 21:34:22 · 1188 阅读 · 0 评论 -
《大话数据结构》--学习笔记5
3.4 线性表的顺序存储结构3.4.1 顺序存储定义线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。线性表(a1,a2,a3,....,an)的顺序存储示意图如下:a1a2...ai-1ai...an3.4.2 顺序存储的方式线性表的顺序存储结构,说白了,就是---在内存中找了块地儿,原创 2012-05-14 13:57:28 · 692 阅读 · 0 评论 -
《大话数据结构》--学习笔记4
第三章 线性表3.3 线性表的抽象数据类型对于一个线性表来说,插入数据和删除数据都是必须操作。所以,线性表的抽象数据类型定义如下:线性表(List)Data 线性表的数据对象集合为{a1,a2,a3,...,an},每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素且只有一个原创 2012-05-14 13:01:35 · 708 阅读 · 0 评论 -
《大话数据结构》--学习笔记1
第一章 数据结构绪论 经典:if you give someone a program ,you will frustrate them for a day ; if you teach tem how to program,you will frustrate them for a lifetim.(如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将原创 2012-05-12 23:34:15 · 4831 阅读 · 0 评论 -
《大话数据结构》--学习笔记3
2.9 算法的时间复杂度2.9.1 算法时间复杂度定义 在进行算法分析时,语句总的执行次数T(n)是关键问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,记作:T(n)=O(f(n)).它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法渐进时间复杂度,简称为时间复杂度。其中f(n)是时间规模n原创 2012-05-13 14:54:10 · 987 阅读 · 0 评论 -
时间编程---那些年我们一起学习linux程序设计
时间编程时间类型(1)Coordinated Universal Tine(UTC):世界标准时间(即格林威治标准时间,Greenwich Mean Time,GMT)(2)Calendar Time:日历时间,是用“从一个标准时间点(如:1970年1月1日0点)到此时经过的秒数”来表示的时间。 时间获取#include time_原创 2012-05-31 15:06:53 · 753 阅读 · 0 评论 -
Linux文件编程之--库函数pk系统调用函数
系统调用open () ,read(),write(),lseek();库函数fopen(), fread(),fwrite(),flseek();库函数1.fopen()函数函数功能打开文件头文件#include函数原型FILE *fopen(原创 2012-05-17 19:47:43 · 1119 阅读 · 0 评论 -
《大话数据结构》--学习笔记12 ***重点***
3.14 双向链表 生活中的双向链表,如图: 单链表总是从头找结点,难道就不可以正反遍历都可以吗?当然可以,只不过需要加点东西而已。 我们在单链表中,有了next指针,就使得我们要查找一下结点的时间复杂度O(n)了,因为我们每次都要从头开始遍历查找。 为了克服单向性这一缺点,出现了-----“双向链表”,就是在单链表的每个结点中,再设置一个指向其前驱原创 2012-05-17 17:54:50 · 882 阅读 · 0 评论 -
C语言深度解剖(精讲版)——读书笔记14 &&自己的一些理解
第四章 指针和数组指针一.指针的内存布局先来看下面的例子: int *p;sizeof(p)=4 ; 这说明“咔”出的p的模子为4字节,显然这个模子不是“int”,虽然它的大小为4.既然不是int,那就一定是“int *”;下面我们来讨论“int *”; 一个“int *”类型的模子在内存上占4个字节的空间,然后把这个4字节大小的空间命名为p,同时限定原创 2012-04-29 13:11:41 · 867 阅读 · 0 评论 -
详解大端模式和小端模式
详解大端模式和小端模式 文章出处,转自:http://blog.csdn.net/ce123_zhouwei/article/details/6971544一、大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家转载 2013-08-30 10:28:02 · 3653 阅读 · 0 评论 -
函数指针和指针函数区别以及如何应用,举例说明
一直忘记这两者的区别,每次用到是重新捡起; 这里解析的比较简约,所以收藏!!引用源:http://zhidao.baidu.com/question/264795890.html1 函数指针变量在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找转载 2013-08-02 17:22:18 · 2490 阅读 · 0 评论 -
C语言深度解剖(精讲版)——读书笔记22-函数指针
第四章 指针和数组 这篇文章写的不好,推荐另一篇好文章地址:http://www.cnblogs.com/gmh915/archive/2010/06/11/1756067.html函数指针一.函数指针的定义(按照我原来说的方法: 后面的那个词”作为主语的方法 C语言深度解剖(精讲版)——读书笔记18 &&自己的一些理解 博文有讲 , 函数指针:即指向函数的指针)看原创 2012-05-01 12:54:34 · 811 阅读 · 0 评论 -
C语言深度解剖(精讲版)——读书笔记18 -指针数组&&数组指针
第四章 指针和数组指针数组和数组指针(这是我特别容易忘记搞混的内容)一.指针数组 和数组指针 的内存布局指针数组:首先它是一个数组,数组的元素都是指针,数组占多少字节由数组本身决定。它是“存储指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组。在32位系统下永远是占4个字节,至于它指向的数组占多少字节并不知道。它是“指向数组的指针”的简称;[我来说说自己的简记方原创 2012-04-29 22:35:31 · 1282 阅读 · 0 评论 -
C语言深度解剖(精讲版)——读书笔记2 &&自己的一些理解
第一章:关键字知识点一:最“小气”的关键字----static 关键字static在C语言中主要有2个作用:作用一:修饰变量 变量又分为全局变量和局部变量,但它们都存在内存的静态区;修饰变量的类型原创 2012-04-25 18:21:24 · 1416 阅读 · 2 评论 -
网络编程<一>---那些年我们一起学习linux程序设计 .
网络编程概述一. Linux 网络优势Linux为用户提供了完善的、强大的网络功能。(1)完善的内置网络;其他操作系统不包含如此紧密地和内核结合在一起的网络部分。(2)Linux免费提供了大量支持internet的软件,internet是在Unix领域中建立并繁荣起来的,在这方面使用Linux是相当方便的,用户能用Linux与世界上其他人通通过internet网络进行通信原创 2012-06-27 19:06:21 · 1028 阅读 · 0 评论 -
网络编程<二>---那些年我们一起学习linux程序设计
Linux网络编程基础 一. 类型Socket 有三种类型:(1) 流式套接字(SOCK_STREAM)Stream:溪流流式套接字可以提供可靠的、面向连接的通讯流,它使用TCP协议。TCP保证了数据传输的正确性和顺序性。(用流式套接字来进行网络编程、通信用的是TCP协议) (2) 数据报套接字(SOCK_DGRAM)数据套接字定义了一种无连接原创 2012-06-27 19:14:00 · 1185 阅读 · 0 评论 -
线程<一>---那些年我们一起学习linux程序设计 .
线程理论基础优点:使用多线程的理由:(1)和进程相比,它是一种非常“节俭”的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给他独立的地址空间,建立众多的数据表来为维护它的代码段、堆栈段和数据段,这是一种“昂贵”的多任务工作方式。(2)线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过进程间的通信方式进行,这种方式不仅费时,而且很不方原创 2012-06-27 18:45:15 · 1014 阅读 · 0 评论 -
线程<二>---那些年我们一起学习linux程序设计
清除:线程终止有两种情况:(1)正常终止;(2)非正常终止(1)正常终止:线程主动调用pthread_exit或者从线程函数中return都将使线程正常退出,这是可预见的退出方式;(2)非正常终止:线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的。 不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,如何保证线程终止时能顺原创 2012-06-27 18:47:23 · 664 阅读 · 0 评论 -
进程控制理论<四>---那些年我们一起学习linux程序设计 .
(消息队列)定义:unix 早期通信机制之一的信号能够传送的信息量有限,管道则只能传送无格式的字节流,这无疑会给应用程序开发带来不便。消息队列,则克服了这些缺点。 发展:消息队列,就是一个消息的链表。可以把消息看做一个记录,具有特定的格式。进程可以向其中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息。 分类:主要有两种类型的消息队列:(1) POSI原创 2012-06-24 22:44:25 · 1104 阅读 · 0 评论 -
进程控制理论<三>---那些年我们一起学习linux程序设计
一.共享内存:共享内存:是被多个进程共享的一部分物理内存。 共享内存是进程间共享数据的一种最快的方式; 一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立即看到其中的内容。 二.共享内存的实现:共享内存的实现分为两个步骤(1)创建共享内存,使用shmget函数。(2)映射共享内存,将这段创建的共享映射到具体的进程空间去,使用sh原创 2012-06-24 22:42:52 · 834 阅读 · 0 评论 -
进程控制理论<二>---那些年我们一起学习linux程序设计
进程通信目的:为什么进程间需要通信?(1) 数据传输 一个进程需要将它的数据发送给另一个进程(2) 资源共享多个进程之间共享同样的资源(3) 通知事件一个进程需要向另一个或一组进程发送消息,通知他们发生了某事件(4) 进程控制有些进程希望完全控制另一个进程的执行(如:debug进程)此时控制进程希望能够拦截另一个进程的所有操作,并能够及时原创 2012-06-20 16:46:08 · 1017 阅读 · 0 评论 -
进程控制理论<一>---那些年我们一起学习linux程序设计
进程控制理论定义:进程是一个具有独立功能的程序的一次运行活动。特点:(1) 动态性;(程序是一段静止的代码,当运行时才能形成进程)(2) 并发性;(两个进程同时进行)(3) 独立性;(两个进程互不干扰)(4) 异步性;(两个进程相互之间没有通信) 状态:刚把进程运行起来后,处于就绪态,通过进程调度进程处于执行态,假如要访问串口,但串口刚好被别原创 2012-06-20 16:17:16 · 1130 阅读 · 0 评论 -
《大话数据结构》--学习笔记2
第二章 算法 2.2 “数据结构”与“算法的关系”简单的说:“数据结构”与“算法”的关系 --- 即:“梁山伯”与“祝英台”的关系把其中一方隔离出来唱独角戏....没意义! 2.3 两种算法的比较现写一个求1+2+3+......+100结果的程序,你应该怎么写呢?大多数人马上写出下面的C语言代码:int i, sum =0, n=100;for (i=1;原创 2012-05-13 12:44:37 · 843 阅读 · 0 评论 -
shell 程序设计2--- 那些年我们一起学习linux程序设计
四.shell 的语法接下来我们讲学习一下内容:& 变量:字符串、数字、环境和参数&条件:shell 中的布尔值&程序控制:if 、elif 、for、while、until、case&命令列表&函数&shell 内置命令&获取命令执行结果&here文档注释:在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。如果使用了注释,即使相当长的时原创 2012-05-27 12:12:08 · 1026 阅读 · 0 评论 -
C语言深度解剖(精讲版)——读书笔记15 &&自己的一些理解
第四章 指针和数组数组一.数组的内存布局先看下面的例子:int a[5]; 数组示意图:数组包含5个int类型的数据 a作为右值时,代表数组首元素的首地址,而非数组的首地址;如图我们定义一个数组a时,编译器根据指定的元素个数和元素类型分配确定大小的一块内存(大小为:元素类型大小*元素个数),并把这块内存的名字命名为a。名字a一旦与这原创 2012-04-29 17:02:57 · 682 阅读 · 0 评论 -
内存对齐的规则以及作用 verygood!的一篇文章!
原文转自:http://www.cppblog.com/snailcong/archive/2009/03/16/76705.html 首先由一个程序引入话题://环境:vc6 + windows sp2//程序1#include using namespace std; struct st1 { char a ;转载 2012-04-28 21:14:33 · 1339 阅读 · 0 评论 -
C语言深度解剖(精讲版)——读书笔记10 &&自己的一些理解
第三章 预处理 知识点一:预处理指令预处理名称意义#define宏定义#undef撤销已定义过的宏名#if#endif#if 的一般含义是:如果#if后面的常量表达式为true ,则编译它与#endif之间的代码,否则跳过这些代码 #else#else 命令的功能有点像C语原创 2012-04-28 13:20:14 · 1030 阅读 · 2 评论 -
C语言深度解剖(精讲版)——读书笔记8 &&自己的一些理解
第二章 符号 注释符号知识点一:几个似是而非的注释问题C语言的注释可以出现在C语言代码的任何地方,这句话对不?好,我们来从下面的例子分析中找出答案:例: (a) int /*....*/i; (b)char *s="abcdefg //hijklmn"; (c) //Is it a \原创 2012-04-27 20:50:02 · 907 阅读 · 0 评论 -
C语言深度解剖(精讲版)——读书笔记6 &&自己的一些理解
第一章: 关键字最易变的关键字----volatile说到volatile的易变让我想起了一个星座....你猜才是什么星座?--- 双子座!双子座的人是一个多变性格出了名的;volatile用它修饰的变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件、线程 其他等;遇到这个关键字声明的变量,编译器对访问该变量的代码不再进行优化,从而可以提供对特殊地址的稳定访问。先看看下面原创 2012-04-26 22:30:01 · 961 阅读 · 0 评论 -
C语言深度解剖(精讲版)——读书笔记4 &&自己的一些理解
第一章 关键字void关键字(感言:很多人认为 void无需重视,其实它很重要)知识点一:void * 则为“空类型指针”,void *可以指向任何类型的数据;void 真正的作用:对函数返回的限定;对函数参数的限定;举例:如果指针p1 和p2的类型相同,那么我们可以直接在p1和p2间相互赋值;如果p1和p2指向不同数据类型,则必须使用强制类型转换运算符把赋值运算符右边的指原创 2012-04-25 22:15:25 · 820 阅读 · 0 评论 -
C语言深度解剖(精讲版)——读书笔记5 &&自己的一些理解
第一章: 关键字const关键字----或许叫它readonly更合适const 的缩写:constant “恒定不变”的意思。也翻译为常量或常数,所以被认为const修饰的值是常量。这种想法不太精确。更精确的说:const是修饰只读变量;其值在编译时不能被使用,因为编译器不知道其存储的内容。 知识点一:const 产生的初始目的是:为了取代预编译指令,消除它的缺点、继承它的原创 2012-04-26 21:48:32 · 949 阅读 · 0 评论 -
C语言深度解剖(精讲版)——读书笔记9 &&自己的一些理解
第二章 符号 知识点一:反斜杠(\)的两种用途:反斜杠\有两种用途:1. “接续符" ----编译器会将反斜杠剔除掉,跟在反斜杠后面的字符自动接续到前一行;(注意:反斜杠之后不能有空格,反斜杠的下一行之前不能有空格)看看下面的例子:cha\r* s="这是一个合法的\\n字符串";2.用作转义字符的开始标识。 例如:\n \t \b 知原创 2012-04-27 23:03:41 · 870 阅读 · 0 评论 -
C语言深度解剖(精讲版)——读书笔记7 &&自己的一些理解
第一章 :关键字union 关键字知识点一: 在union中所有的数据成员共用一个空间,同一时间只能存储其中一个数据成员,所有数据成员具有相同的起始地址。例如: union StateMachine { char character;原创 2012-04-27 11:23:05 · 1052 阅读 · 1 评论