自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

刚刚起步的菜鸟

大牛也是菜鸟慢慢的培养起来的。

  • 博客(42)
  • 资源 (7)
  • 收藏
  • 关注

原创 Linux网络编程之socket文件传输示例

这篇文章主要介绍了Linux网络编程之socket文件传输示例,对于基于Linux平台的C程序员来说有一定的借鉴价值,需要的朋友可以参考下本文所述示例程序是基于Linux平台的socket网络编程,实现文件传输功能。该示例是基于TCP流协议实现的socket网络文件传输程序。采用C语言编写。最终能够实现传输任何格式文件的文件传输程序。具体实现代码如下:Server端代码如下

2016-11-30 22:32:47 699

原创 OSI七层模型各层分别有哪些协议及它们的功能

在互联网中实际使用的是TCP/IP参考模型。实际存在的协议主要包括在:物理层、数据链路层、网络层、传输层和应用层。各协议也分别对应这5个层次而已。要找出7个层次所对应的各协议,恐怕会话层和表示层的协议难找到啊。。       【1】物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来

2016-11-23 14:39:14 30751 2

原创 C中的volatile用法

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1) 并行设备的硬件寄存器(如:状态寄存器) 2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables

2016-11-23 14:19:22 295

原创 linux下用core和gdb查询出现"段错误"的地方

有些时候我们在一段C代码的时候,由于对一个非法内存进行了操作,在程序运行的过程中,出现了"段错误"。呵呵,这种问题我想很多人会经常遇到。遇到这种问题是非常无语的,只是提示了"段错误",接着什么都没 有,如果我们一味的去看代码找太疼苦了,因为我们都相信自己写的代码没问题,现实就是现实。下面介绍一种方法,可以有效的定位出现"段错误的地方"。当我们的程序崩溃时,内核有可能把该程序当前内存映射到c

2016-11-20 01:25:03 375 1

原创 Linux中查找命令总结

findfind是最常使用和最强大的查找命令,可以找到任何想查找找的文件用法如下:$find如果不加参数,默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件)实例:$find/home-name'a*'搜索home目录(含子目录)中所有文件名以a开头的文件$find/home-name'a*'-ls搜索hom

2016-11-20 01:23:03 230

原创 详解Linux 文件与目录管理

我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /。其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。在开始本教程前我们需要先知道什么是绝对路径与相对路径。绝对路径:路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。相对路径:路径的写法,不是由 / 写起,例如由 /usr/share/do

2016-11-20 01:21:53 297

原创 Linux内存管理

从哪里开始呢?还是从最基础的内存管理开始吧。内存管理是Linux内核中最基础,也是相当重要的部分。理解相关原理,不管是对内存的理解,还是对大家写用户态代码都很有帮助。很多书上、很多文章都写了相关内容,但个人总觉得内容太复杂,不是太容易理解,这里想用我自己理解的简单的方式来描述,希望能有所帮助,按自己的思路,可能有点乱,见谅。从内存分配开始大家写代码时,应该都会分配内存,不同语言,层次不同,

2016-11-20 01:16:45 289

原创 冒泡排序和选择排序的区别

语言中,常用的算法有:冒泡排序、快速排序、插入排序、选择排序、希尔排序、堆排序以及归并排序等等。那么从这篇开始,我将分别总结下这几种排序法。先交代一下,我们将要排序的数组定义为arr[N],即数组arr[]包含N个元素。## 冒泡排序法(Bubblesort) ##所谓排序法,就是对一组无序的序列进行有序的排序(从大到小或者从小到大),那么什么叫冒泡排序法,冒泡排序法又是怎

2016-11-17 02:40:01 1050

转载 动态链接和静态连接的优缺点

1 静态链接库的优点  (1) 代码装载速度快,执行速度略比动态链接库快;  (2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。 2 动态链接库的优点  (1) 更加节省内存并减少页面交换; (2) DLL文件与EXE文件独立,只要输出接口不变(即名

2016-11-15 23:20:26 4888

原创 怎么学习嵌入式技术开发

学习技术不难,看你自己怎么规划希望给参加深圳单片机培训的朋友一些分享和帮助ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标:(1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9)(2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定)(3) 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。

2016-11-15 22:02:57 5683 1

原创 二叉树的遍历

今天来总结下二叉树前序、中序、后序遍历相互求法,即如果知道两个的遍历,如何求第三种遍历方法,比较笨的方法是画出来二叉树,然后根据各种遍历不同的特性来求,也可以编程求出,下面我们分别说明。首先,我们看看前序、中序、后序遍历的特性: 前序遍历:     1.访问根节点     2.前序遍历左子树     3.前序遍历右子树 中序遍历:     1.中序遍历左子树  

2016-11-15 20:08:07 251

原创 C语言条件编译及编译预处理阶段

一、C语言由源代码生成的各阶段如下:C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件       其中 编译预处理阶段,读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。或者说是扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。预处理过程先于编译器对源代码进行处理。       在C 语言中,并没有任何内在的机制

2016-11-13 12:40:17 1314

转载 宏定义的优缺点

先来看一下宏的定义:用#define命令将一个指定的标识符(即宏名)来代表一个字符串。它的一般型式为:#define 表示符 字符串#define命令属于“预处理命令”中的一种。它是由C++统一规定的,但非C++语言本身的组成部分,由于编译器无法识别他们,不能对其直接进行编译。预处理过程必须在对程序进行词法与语义分析、代码生成与优化等通常的编译过程之前进行,经过预处理后的程序不再包

2016-11-11 21:48:25 459

原创 要求设置一绝对地址为0x67a9的整型变量的值为0xaa55。

这一问题测试你是否知道为了访问一绝对地址把一个整型数强制转换(typecast)为一指针是合法的。这一问题的实现方式随着个人风格不同而不同。典型的类似代码如下:int *ptr;ptr = (int *)0x67a9;*ptr = 0xaa55;一个较晦涩的方法是:*(int * const)(0x67a9) = 0xaa55;即使你的品味更接近第二

2016-11-11 19:42:20 6973 1

原创 GDB多线程调试的基本命令。

info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。 thread ID 切换当前调试的线程为指定ID的线程。 break thread_test.c:123 thread all在所有线程中相应的行上设置断点thread apply ID1 ID2 command 让一个或者多个线程执行

2016-11-11 13:15:37 6436

原创 Socket、Http、TCP/IP、UDP

HTTP协议:简单对象访问协议,对应于应用层  ,HTTP协议是基于TCP连接的tcp协议:    对应于传输层ip协议:     对应于网络层 TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使

2016-11-08 22:04:47 249

转载 sizeof的详尽计算结构体字节数方法

Sizeof用法本文主要包括二个部分,第一部分重点介绍在VC中,怎么样采用sizeof来求结构的大小,以及容易出现的问题,并给出解决问题的方法,第二部分总结出VC中sizeof的主要用法。1、 sizeof应用在结构上的情况请看下面的结构:struct MyStruct{double dda1;char dda;int type

2016-11-08 19:44:29 408

原创 用变量a给出下面的定义

a) 一个整型数(An integer)b) 一个指向整型数的指针(A pointer to an integer)c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)d) 一个有10个整型数的数组(An array of 10 integers)e) 一个有10个指针的数组,该指针是指

2016-11-07 20:56:27 1362

原创 C语言运算符优先级(超详细)

C语言运算符优先级优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右--()圆括号(表达式)/函数名(形参表)--.成员

2016-11-07 20:42:21 732

原创 指针数组和数组指针的使用

#includeint main(){char *str[] = {"Welcome","to","Fortemedia","Nanjing"};char **p = str +1;str[0] = (*p++) +2;str[1] = *(p+1);str[2] = p[1] + 3;str[3] = p[0] + (str[2] - str[1]);

2016-11-06 22:12:01 221

原创 引用与指针有什么区别?

1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。3) 不存在指向空值的引用,但是存在指向空值的指针。

2016-11-06 21:28:31 260

原创 static有什么用途?(请至少说明两种)

1.限制变量的作用域(DL:使其只在定义的当前文件中起作用,static是只能由与变量在同一个文件中定义的程序 存取的全局变量。也就是说使全局变量成为文件的私有变量,以致其他文件不可以通过将它们定义为extern而存 取这些变量。),2.设置变量的存储域(DL:存储在最开始的静态存储空间里面)。

2016-11-06 21:27:13 3092

转载 理解有符号数和无符号数负数

理解有符号数和无符号数负数在计算机中如何表示呢? 这一点,你可能听过两种不同的回答。 一种是教科书,它会告诉你:计算机用“补码”表示负数。可是有关“补码”的概念一说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一切。再者,用“补码”表示负数,其实一种公式,公式的作用在于告诉你,想得问题的答案,应该如何计算。却并没有告诉你为什么用这个公式就可以和答案? 另一种是一些程序员告诉

2016-11-05 21:39:18 7954 1

原创 看代码写输出i++和++i的区别

#includeint main(void){ int i = 8 ; printf("%d\n",++i); 输出9,i=9printf("%d\n",--i); 输出8,i=8printf("%d\n",i++); 输出8,i=9printf("%d\n",i--); 输出9,i=8printf("%d\n",-i++); 输出-8,i=9printf("%d\n",-

2016-11-05 20:53:13 939

原创 简述 C、 C++程序编译的内存分配情况?

1.C、 C++中内存分配方式可以分为三种:(1)从静态存储区域分配:内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快、不容易出错,因为有系统会善后。例如全局变量,static变量等。(2)在栈上分配:在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

2016-11-04 00:18:43 479

原创 C中的 malloc 和C++中的 new 有什么区别?

1.malloc 和 new 有以下不同:(1) new、delete 是操作符,可以重载,只能在 C++中使用。(2) malloc、free是函数,可以覆盖,C、C++中都可以使用。(3)new可以调用对象的构造函数,对应的 delete 调用相应的析构函数。(4)malloc 仅仅分配内存,free 仅仅回收内存,并不执行构造和析构函数(5)new、delete 返回的是某种数据

2016-11-04 00:17:26 741

原创 线程与进程的区别和联系? 线程是否具有相同的堆栈? dll是否有独立的堆栈?

进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程。每个线程有自己的堆栈。DLL中有没有独立的堆栈,这个问题不好回答,或者说这个问题本身是否有问题。因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中的代码是EXE中的线程所调 用,那么这个时候是不是说这个DLL没有自己独立的堆栈?如果DLL中的代码是由DLL自己创 建的

2016-11-04 00:15:43 2641

原创 怎么样对绝对地址0x100000赋值

我们可以用(unsigned int*)0x100000 = 1234; 那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做? *((void (*)( ))0x100000 ) ( ); 首先要将0x100000强制转换成函数指针,即: (void (*)())0x100000 然后再调用它: *((void (*)())0x100000)(); 用typedef可以看得更直

2016-11-04 00:13:22 5255

原创 ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?

应用层、表示层 会话层 运输层 网络层 数据链路层物理层。tcp /udp属于运输层。TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。与TCP不同,UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于UDP比较简单,UDP 头包含很少的字节,比TCP负载消耗少。 tcp: 提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好

2016-11-04 00:10:53 3876

原创 关于strcpy的面试题

找错题  试题1:void test1(){ char string[10]; char* str1 = "0123456789"; strcpy( string, str1 );}  试题2:void test2(){ char string[10], str1[10]; int i; for

2016-11-03 23:04:41 519

原创 交换两个变量的值 不使用第三个变量

通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。代码如下:int a,b;a=10; b=15;int t;t=a; a=b; b=t;这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用。在实际软件开发当中,此算法简单明了,不会产生歧义,便于程序员之间的交流,一般情况下碰到交换变量值的问题,都应采用此算法(以下称为标准算法)。

2016-11-02 23:29:48 358

原创 七层网络模型与四层网络模型及每层的网络协议?

TCP/IP四层模型TCP/IP参考模型    ISO制定的OSI参考模型的过于庞大、复杂招致了许多批评。与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比示意图。图2-1  TCP/IP参考模型  2.1 TCP/IP参考模型的层次结构  TCP/IP协议栈是美国国防部高级

2016-11-02 19:31:55 718

原创 进程间通信的方式有哪些?各自的优缺点及应用选择?

现在最常用的进程间通信的方式有信号、信息量、消息队列、共享内存等。百度经验有介绍8种 无名管道(pipe),高级管道(popen)、有名管道(nemed pipe)、消息队列(message queue)、信号量(semophore)、信号(sinal)、共享内存(shared memory)、套接字(socket)。--》管道、有名管道管道是单向的,先进先出,提供

2016-11-02 19:28:04 3917

原创 TCP与UDP的区别

两种不同的协议而已,UDP实现起来相对比TCP更加的简单. TCP-有连接,所以握手过程会消耗资源,过程为可靠连接,不会丢失数据,适合大数据量交换UDP-非可靠连接,会丢包,没有校验,速度快,无须握手过程 简单点讲UDP把需要发送的包往网络上一扔就不管它了,主要用于一些突发的小数据包,比如OICQ;而TCP还要实现差错控制、流量控制等,主要用于持续的数据流,比如HTTP、FTP等协议

2016-11-02 14:17:54 422

原创 谈谈对进程的理解?谈谈你对线程的理解?2.进程死锁的原因?如何解决进程死锁?

1.谈谈对进程的理解?答:首先进程是指在系统中正在运行的一个应用程序;程序一旦运行就是进程,或者更专业化来说:进程是指程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位,进程有五方面的特点:第一:动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。第二: 并发性:任何进程都可以同

2016-11-02 12:44:39 570

原创 数组名和指针的区别?

#include #include void main(void){char str[13]="Hello world!";char *pStr="Hello world!";coutcoutcoutcoutreturn;}【答案】打印结果:13  4  12  12注意:一定要记得数组名并不是真正意义上的指针,它的内涵要比指针丰富的多。但是当数组名当做

2016-11-02 12:39:17 278

原创 多线程与多进程通信方式的区别?

进程与线程的区别:通俗的解释一个系统运行着很多进程,可以比喻为一条马路上有很多马车不同的进程可以理解为不同的马车而同一辆马车可以有很多匹马来拉--这些马就是线程假设道路的宽度恰好可以通过一辆马车道路可以认为是临界资源那么马车成为分配资源的最小单位(进程)而同一个马车被很多匹马驱动(线程)--即最小的运行单位每辆马车马匹数=1

2016-11-02 12:17:55 605

原创 多进程与多线程的区别?

线程是指进程内的一个执行单元,也是进程内的可调度实体。与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于 进程的资源.(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导

2016-11-02 11:24:07 343

原创 常用的嵌入式数据库的比较

ProgressProgress软件公司2000年4月18号18时在京宣布,全面发售在Linux操作系统上运行的数据库及其部署产品。Progress在嵌入式数据库市场中拥有全球第一的占有率,世界上有超过200万人正在使用Progress软件公司的应用软件,目前部署Progress产品的站点数量已经超过100,000个。通过Progress软件公司第一个Linux版嵌入式数据库,独立软件

2016-11-02 10:27:42 16076

转载 工程项目管理的作用

1、定义:makefile是一个脚本文件,解决了批处理(自动编译)的问题,即用一条指令替代多条指令执行的效果,帮助make来编译工程代码。在 Linux(unix )环境下使用GNU 的make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入一些时间去完成一个或者多个称之为Makefile

2016-11-02 10:09:56 792

国泰新点笔试题目

国泰新点笔试题目

2016-12-22

高伟达面试题

高伟达面试题目

2016-12-04

中新赛克的面试题目

中新赛克面试题目

2016-11-27

华为面试题

华为嵌入式面试题目

2016-11-23

内核驱动问答

驱动常考面试常问的类型

2016-11-23

LINUX内核经典面试题

驱动面试题

2016-11-23

c语言面试大全

c语言面试宝典。笔面试都很重要的常考知识点!

2016-11-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除