- 博客(58)
- 收藏
- 关注
转载 进程间通信的几种方式:管道、信号、消息队列、共享内存
一、管道单向,一段输入,另一端输出,先进先出FIFO。管道也是文件。管道大小4096字节。特点:管道满时,写阻塞;空时,读阻塞。分类:普通管道(仅父子进程间通信)位于内存;命名管道位于文件系统,没有亲缘关系管道只要知道管道名也可以通讯。管道是由内核管理的一个缓冲区(buffer),相当于我们放入内存中的一个纸条。管道的一端连接一个进程的输出。这个进程会向管道中放
2017-02-07 18:25:12 2004
原创 进程和线程
答:首先得知道什么是进程什么是线程,我的理解是进程是指在系统中正在运行的一个应用程序;程序一旦运行就是进程,或者更专业化来说:进程是指程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。进程——资源分配的最小单位,线程——程
2017-01-23 12:28:39 334
原创 网络编程常见面试题
1.四层网络模型和七层网络模型;四层网络模型:a.应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。b.传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。
2017-01-21 14:07:28 5593
转载 如何让UDP实现可靠传输
如何让UDP实现可靠传输自定义通讯协议,在应用层定义一些可靠的协议,比如检测包的顺序,重复包等问题,如果没有收到对方的ACK,重新发包UDP没有Delievery Garuantee,也没有顺序保证,所以如果你要求你的数据发送与接受既要高效,又要保证有序,收包确认等,你就需要在UDP协议上构建自己的协议。比如RTCP,RTP协议就是在UPD协议之上专门为H.323协议簇上的IP电话
2017-01-20 10:09:56 638
原创 数据库程序
#include #include #include int handle_result(void *para, int column_count, char **column_value, char **column_name){ printf("para = %s\n",(char *)para); printf("column co
2017-01-18 20:13:57 525
转载 系统调用和库函数调用的区别
Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api,采用这样的方式有很多种原因,第一:双缓冲技术的实现。第二,可移植性。第三,底层调用本身的一些性能方面的缺陷。第四:让api也可
2017-01-17 23:50:25 311
原创 单向循环链表的头插,尾插,中间插以及删除节点
#include struct node{ int num; struct node *next;};typedef struct node Node;typedef Node * Link;void creat_link(Link *head){ //*head = NULL; *head = (Link
2016-12-21 22:50:04 903
原创 带头结点的链表头插,尾插,中间插以及删除节点
#include struct node{ int num; struct node *next;};typedef struct node Node;typedef Node * Link;void creat_link(Link *head){ //*head = NULL; *head = (Link
2016-12-21 22:48:24 535
原创 链表的建立
#include struct node{ int num; struct node *next;};typedef struct node Node;typedef struct node * Link;void creat_link(Link *head){ *head = NULL;}
2016-12-19 23:23:57 234
原创 关键字
宏函数和自定义函数的区别:1.宏函数只在预处理阶段;自定义函数经历编译、汇编、链接、生成文件;2.宏函数只做替换;自定义函数要分配内存空间,释放内存空间等一系列操作。宏函数执行效率更高。宏函数的优点:尽管和真正的函数相比有很多缺点,但只要小心使用还是会显著提高代码的执行效率,毕竟省去了分配和释放栈帧、传参、传返回值等一系列操作,因此那些简短并且被频繁调用的函数经常用宏函数来
2016-12-19 13:47:01 284
转载 条件编译
其中 编译预处理阶段,读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。或者说是扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。预处理过程先于编译器对源代码进行处理。 在C 语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器
2016-12-19 13:19:33 621
原创 运算符
++和++i的区别:i++是先使用,后自加。++i先自加后使用。例如:i= 2;1.num=(i++)+(i++)+(i++)+(i++)i=6 num= 82.num=(++i)+(++i)+(++i)+(++i)3.i=6,num=19;i=i*((i++)+(++i))i= 19右移用符号位来补位,左移用0来补位 与运算通
2016-12-16 23:45:17 196
原创 考卷
一、简单题(20分)1、请问int *p 和 char *p 分别占几个字节?为什么?2、请简述sizeof与strlen的区别3、请简述用户空间的内存分配及各空间保存的数据类型4、请说明全局变量和局部变量的区别 二、程序阅读题(30分)1、请问以下代码输出结果是什么int i = 1;void main(){int i = i;} 2、
2016-12-16 23:07:33 816
转载 单链表的简单面试题
声明:本文为博主原创文章,未经博主允许不得转载。[cpp] view plain copy print?class="cpp" name="code">#define _CRT_SECURE_NO_WARNINGS 1 #include "SListNode.h" void Test1()//PushBack PopB
2016-12-14 21:21:55 240
转载 单链表常见操作
存储方法 链接方式存储的线性表简称为链表(Linked List)。 链表的具体存储表示为: ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的) ② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link
2016-12-14 21:15:27 336
转载 calloc,ralloc如何使用,使用的注意事项
三个函数都在文件中,其中void * 是万能指针,但是不能取值,一般需要什么数据类型,就用什么数据类型;若是全用void *,则可能引起越界或不完整。如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当分配的内存不再使用时,需要使用free()函数将其释放掉。malloc():功能是分配长度为size字节的字节块。malloc不初始化内存空间,也就是依然保留着这段内存里的数据
2016-12-12 21:07:20 2289
转载 char *ptr = hello world
老说自己是学C/C++的,今天又知道了自己是多么的一个菜鸟呀! 今天看《高级C/C++编程》P289关于指针参数是如何传递内存的,有一下内容: “用函数返回值来传递动态内存这种方法虽然好用,但是常常有人把return语句用错。这里强调不要用return语句返回指向“栈内存”的指针或引用,因为该内存在函数结束时将自动释放,见下例: char Ge
2016-12-11 20:30:41 1750
原创 一周总结
上一周主要学习了函数、指针与数组的区别,还介绍了华为编码规范。首先,函数是一个指针常量,保存的是函数的入口地址。函数名可以作为实参传递。此外还讲了会掉函数;好的扩展性。函数的调用是一个重点:1.通过函数名找到函数的入口;2.给形参分配空间;3.传值;4.执行函数体语句;5.返回,释放空间。有两句话也很重要:1.当只使用不修改实参变量对应空间的值,传函数变
2016-12-11 20:22:37 235
原创 华为编码规范
1 排版¹ 1-1:程序块要采用缩进风格编写,缩进的空格数为4个。说明:对于由开发工具自动生成的代码可以有不一致。¹ 1-2:相对独立的程序块之间、变量说明之后必须加空行。示例:如下例子不符合规范。if (!valid_ni(ni)){ ... // program code}repssn_ind = ssn_data[index].repssn_inde
2016-12-09 22:51:43 6760
转载 如何使用GDB调试段错误
转载自;http://blog.csdn.NET/deutschester/article/details/6739861原文位置 http://www.unknownroad.com/rtfm/gdbtut/gdbsegfault.html 我们打算使用gdb去解决为什么下面的程序(文件为segfault.c)引起了段错误的问题。下面的这段程序是从用
2016-12-08 23:49:02 552
原创 函数
指针数组名做形参用二维指针来接。ralloc函数:追加分配;而calloc函数一块一块分配,但块与块之间可能不连续。声明可以优化编译速度。函数如何传参:1.通过函数名找到函数入口;2.给形参分配空间;3.传值;4.执行函数体语句;5.返回,释放空间。 当只使用不修改实参变量对应空间的值,传实参变量名;当既使用也修改实参变量对应空间的值,传实参变量对应空间
2016-12-07 22:17:53 429
转载 指针与数组的区别
C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。下面以字符串为例比较
2016-12-06 21:47:41 227
原创 函数与数组
数组的地址用数组指针变量来保存。char *argv 可能是指针的地址,也可能滴指针数组。函数名是一个指针常量,保存的是函数的入口地址。函数名可以作为实参传递。函数指针做形参,指向的函数称为回调函数或钩子函数。其作用是提高代码的扩展性与维护性。好的扩展性指修改代码的时候,修改的代码越少,扩展性越好。
2016-12-05 22:16:16 229
原创 数组初学
定义数组杜绝用变量来作为其长度。用宏定义可以提高代码的移植性和维护性。将数组初始化为0:int a[ ] = {0};或者memset(a,0,sizeof(a));一维数组名是指针常数(不能自加),保存的是数组首元素的地址。&a:对一维数组名取地址等于一维数组的地址;*(&a) = a;:对一维数组的地址取值等于一维数组首元素的地址;a:一维数组首元素的地址;aa:首
2016-12-03 22:14:45 400
原创 四种函数的实现
四种函数的实现:strcmp:int my_strcmp(char *s1, char *s2){ while(*s1 != '\0' && *s2 != '\0') { if(*s1 > *s2){ return 0;}else if(*s1 { return -1;} }
2016-12-03 21:54:29 505
转载 malloc的实现原理
malloc()是C语言中动态存储管理 的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值 是一个指向所分配的连续存储域的起始地址的指针。 动态内存分配 就 是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据 程序的需要即时分配,且
2016-12-02 22:52:46 928
转载 面试题
程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大经典原创系列集锦与总结(七月在线:https://www.julyedu.com/,面试 & 算法 & 机器学习在线课程)作者:July--结构之法算法之道blog之博主。时间:2010年10月-2014年12月。出处:http://blog.csdn.net/v_JULY_v 。说明:本博客中部分
2016-12-01 20:19:56 400
原创 野指针和字符的遍历
什么是野指针?野指针是随机指向一块内存的指针,其容易造成的错误是内存泄露。它不一定每一次都会产生段错误,因为有时候分配的地址是别人已经申请过的地址。如何避免野指针?要避免野指针要养成一下良好的编码习惯:1.当一个指针没有指向时,给它置为空(NULL),是为了引起这是零地址,也提醒人们这是一个野指针;2.当要往一个指针指向的空间赋值时,一定要给这个指针分配空间;3.当给一个指
2016-11-30 22:11:48 429
转载 如何通scanf获取一个句子
首先明确 scanf的结束标志是空格和回车键,而gets的结束标志为回车键,输入字符串时,一般采用gets因此有下面两种方法可以在使用scanf时完整输入字符串1)利用strcat()函数来实现带空格字符串的输入,可以用字符串追加函数strcat()来连接每个单词。 Strcat()一般格式:char*strcat(char*dest,const char*
2016-11-29 22:39:25 1424
原创 printf和指针初实
Printf是行缓冲(满一行才输出)。因此其输出条件如下:1.添加\n或者\r;2.将缓冲区填满。Scanf和printf用的是缓冲区,因此也要在printf中加\n。当有段错误时,可以在每一行后面加printf(“%s: %d\n”,__func__,__LINE__);然后进入了重点和难点----指针。什么是指针呢?指针是一个变量。下面以一个例子进行讲解。int num
2016-11-28 23:38:58 449
转载 结构体内存对齐的补充说明与总结
在第一篇博客已经对结构体内存对齐进行了一些简单的说明,在这篇则对其进行一些总结和补充说明:总结:结构体内存对齐中存在默认对齐数(不同平台不一致),VS中为8,Linux中为4,也可以自己设定,在VS中运用#program pack(4),可将8改为4,最后可以用 #program pack()取消;1:必须了解偏移值,如图:数字0、1、2、3
2016-11-27 21:35:29 365
原创 常量与变量
首先讲了内存与硬盘的区别:内存保存动态数据,断电就会丢失,存放的是运行的数据。而硬盘保存动态数据,断电不丢失,存放的是静态的数据。接下来讲了进程虚拟地址空间,通过mmu(内存管理单元)把虚拟地址空间映射到物理内存。划分空间的作用:各个数据之间互不影响;起到保护作用。最高地址1个g空间划分给内核,剩下3个g位用户空间,用户空间分为栈空间,堆空间,数据区和代码段。栈空间里保存局部变量、函数
2016-11-27 09:30:20 410
原创 字符
在32位系统中,1字节=8bit,1字=4字节=32bit,半字=2字节=16位。字节长度是变量在内存中占了的字节。Sizeof是运算符,是测量一个变量或数据类型所占的字节长度。Int=4字节Char=1字节Short=2字节Long=4字节Float=4字节Double=8字节所有的指针保存的都是地址,在操作系统里。地址是固定长度的(32位的4个字节,64位的
2016-11-25 22:44:36 308
原创 程序
请编写一个c函数,该函数给出一个字节中被置为1的位的个数 输入一个整数a,再输入两个整数p1,p2(p1,p2输入一个整数a,再输入两个整数p1,p2(p1,p2输入一个整数a,再输入两个整数p(p#include void fun(char ch){ int i; int temp; int count = 0;
2016-11-23 23:23:47 216
转载 左旋转字符窜
题目描述:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。 思路一、暴力移位法 初看此题,咱们最先想到的笨方法可能就是一位一位移动,故咱们写一个函数叫做 leftshiftone(char *
2016-11-23 21:41:45 466
转载 C/C++变量在内存中的分布
C/C++变量在内存中的分布在笔试时经常考到,虽然简单,但也容易忘记,因此在这作个总结,以加深印象。先写一个测试程序:[cpp] view plain copy#include #include int g_i = 100; int g_j = 200; int g_k, g_h; int main()
2016-11-22 19:14:51 416
原创 右左法则
今天讲了用右左法则来理解复杂的变量声明。总结起来就是以下几句话: 先看右再看左,如果右边没有东西就是变量,有(就是函数,有【就是数组,然后看左边,有*就是指针,然后看是int还是char还是void等等。然后举了几个例子进行练习:int *( *( *arr[5])())(); arr是一个函数指针数组,该数组里的元素指向一个形参为空,返回值为函数指针;该指针指向一个形参为空,
2016-11-21 23:07:10 471
原创 现有开发语言以及适用范围
现有的开发语言有哪些?有C语言,C++,Java,PHP,C#,.net,python,shell,oc,vb,perl,Delphi等等。这些语言的应用范围是什么?C语言的适用范围挺广的,适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要硬件进行操作的场合,优于其它高级语言,有一些大型应用软件也是用C语言编写的。 C++应用于游戏(
2016-11-20 20:29:24 2216
原创 C语言初了解
今天讲了C语言的一些概述。做嵌入式开发为什么要选择C语言呢?因为所有操作系统的内核都是由C语言实现的。C语言的特点:C语言有出色的移植性,能够访问硬件,运行效率高。但也有一些缺点:复用性差,维护性差,扩展性差。什么是移植性:从一个平台切换到另一个平台,修改的代码越少,移植性越好。软件可以在不同的平台运行。C语言就可以适用于不同的硬件平台。现有的开发语言有哪些?Java,c++,ph
2016-11-19 22:58:17 632
原创 Linux快捷键
今天对makefile进行了回顾,复习了上次的内容。也讲了在面试过程中面试官经常会问的三个问题:1.makefile的作用;2.写一个简单的makefile文件;3.写过什么样的makefile。然后讲了一些在Linux里的快捷键:复制 yy粘贴 p删除 dd恢复 u还有一些回到底层的键: 替换:首先将光标移到这一行: S/a/b
2016-11-18 22:20:58 174
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人