自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (1)
  • 收藏
  • 关注

原创 TCP协议与UDP协议的区别

TCP协议与UDP协议的区别    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信!TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。TCP/IP协议集包括应用层,

2016-12-31 20:03:54 182

原创 互斥锁mutex

在信号量最后的部分说,当count=1的时候可以用信号量实现互斥。在早期的Linux版本中就是当count=1来实现mutex的。 内核重新定义了一个新的数据结构 struct mutex, 将其称为互斥锁或者互斥体。同时对信号量的DOWN和UP操作针对struct mutex做了修改。互斥锁的定义和初始化因为struct mutex的定义中有一些调试相关的成员,在这里

2016-12-30 21:01:30 1497

原创 Linux运行shell程序的方法

用户可以用任何编辑程序来编写Shell程序。因为Shell程序是解释执行的,所以不需要编译成目的程序。按照Shell编程的惯例,以 bash为例,程序的第一行一般为“#!/bin/bash”,其中 # 表示该行是注释,叹号 ! 告诉Shell运行叹号之后的命令并用文档的其余部分作为输入,也就是运行/bin/bash并让/bin/bash去执行Shell程序的内容。执行Shell程序的方法有

2016-12-29 20:50:37 496

原创 常见的内存错误以及相应的对策

发生内存错误是件非常麻烦的事情,编译器不能自动发觉这些错误,通常在程序运行时才会出现,而这些错误大多没有明显的症状,时隐时现,增加了改错的难度,有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走了问题又开始做乱。常见的内存错误及对策有以下几种:1)内存未分配成功,就使用了它。一般程序员都不会意识到内存会分配不成功,而直接使用了该指针;常用的解决方法:在使用内存之前检查指针是否为

2016-12-28 21:12:56 334

原创 fgets()函数

原型  char *  fgets(char * s, int n,FILE *stream);    参数:         s: 字符型指针,指向存储读入数据的缓冲区的地址。         n: 从流中读入n-1个字符         stream : 指向读取的流。   返回值:          1. 当n          2.

2016-12-27 21:03:49 645

原创 位运算应用

位操作运算符的应用& 1.对特定位清0 mask中的特定位为0,其余位为1。s = s & mask;2.取某数中的指定位 mask特定位置1,其余位0。| 常用来将源操作数某些位置1,其余位不变 mask特定位置为1,其余位为0。^ 1.使特定位取反 mask特定位置1,其余位为0; 2.不引用第三方变量,交换值a = a ^

2016-12-26 21:31:29 196

原创 判断单链表内是否有环

要判断一个单链表是否有环结构,可以考虑以下几个问题:给定一个单链表,只给出头指针head:1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带环链表的长度是多少?int hasloop(Link head){int i = 0;if(head->next == NULL){return 0

2016-12-25 21:39:34 455

原创 wait函数和waitpid函数

当前进程一旦调用了wait函数,就立即阻塞当前进程,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait 就会收集这个子进程的信息, 并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。wait(等待子进程中断或结束)相关函数 waitpid,fork需要头文件#include

2016-12-24 20:43:32 293

原创 终止进程的工具kill,killall,pkill和xkill

终止一个进程或终止一个正在运行的程序,一般是通过 kill 、killall、pkill、xkill 等进行。比如一个程序已经死掉,但又不能退出,这时就应该考虑应用这些工具。另外应用的场合就是在服务器管理中,在不涉及数据库服务器程序的父进程的停止运行,也可以用这些工具来终止。为什么数据库服务器的父进程不能用这些工具杀死呢?原因很简单,这些工具在强行终止数据库服务器时,会让数据库产生更多

2016-12-23 21:56:54 566

原创 socket通信相关

在系统开发过程中,如果涉及到了Socket通讯,那就要制定好通讯的协议,只有制定好了规则,后面的工作才方便顺利展开,制作通讯协议时要考虑到通讯的安全性,必要的信息要经过加密处理,同时也要考虑到系统的可扩展性,如果以后需要增加一个命令或者修改命令要保证这些工作能方便的进行。          协议的内容包括如下:1.  本协议使用的字符串,如密码,位数为6位。2.  通讯方式

2016-12-22 21:41:25 309

原创 strcpy,sprintf,memcpy的区别

strcpy 函数操作的对象是字符串,完成 从 源字符串 到 目的字符串 的 拷贝 功能。sprintf 函数操作的对象不限于字符串:虽然目的对象是字符串,但是源对象可以是字符串、也可以是任意基本类型的数据。这个函数主要用来实现(字符串或基本数据类型)向 字符串的转换 功能。如果源对象是字符串,并且指定 %s格式符,也可实现字符串拷贝功能。   memcpy 函数顾名思义就

2016-12-21 20:38:18 286

原创 数组和链表的区别

数组与链表的区别  1.基于空间的考虑         数组的存储空间是静态,连续分布的,估计过大造成空间浪费,估计太小又将使空间溢出机会增多。而链表的存储空间是动态分布的,只要内存空间尚有空闲,就不会产生溢出;  链表中每个节点除了数据域外,还有指针域,存储密度小于1(数组为1), 存储空间利用率就越高。    2. 基于时间的考虑  数组中任意节点都可以在O(1)内直接

2016-12-20 21:19:59 292

原创

一、什么是树?        在前几篇的博文中主要讲述的是链式存储这种数据结构,它们的用途非常广泛,但是在实际的应用中,还存在着另一种非常重要的数据结构,它就是树。树的结构示意图如下所示:        上图就是一种数据结构----树,之所以在每个框中都留出空白,主要原因是这种结构如果根据上下文是能够传达一些重要的结构信息,比如我们可以作如下思考:       

2016-12-19 20:41:06 226

原创 解释关键字

一、const1) 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)2) 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。3) 合理地

2016-12-18 19:28:44 235

原创 exit()和_exit()的区别

进程就好比人一样有其生命,我们通过fork()函数来创建一个进程,那么我们又是如何来中止进程呢。1.Linux中的进程退出进程退出表示进程即将结束。在Linux中进程退出分为了正常退出和异常退出两种。(1)正常退出a. 在main()函数中执行return;b.调用exit()函数;c.调用_exit()函数。(2)异常退出a.调用a

2016-12-17 21:54:39 302

原创 strlen和sizeof的区别

strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。   char aa[10];cout  char aa[10]={'\0'}; cout  char aa[10]="jun"; cout  而sizeof()返回的是变量声明

2016-12-16 21:50:18 187

原创 fork进程数的问题

#includeint main(){  fork();fork()&&fork()||fork();fork();return 0;}问除了第一个父进程,这个程序到底创建了多少进程?这道题主要考了两个知识点,一是逻辑运算符运行的特点;二是对fork的理解。如果有一个这样的表达式:cond1 && cond2 ||

2016-12-15 21:51:26 1440

原创 什么是死锁,以及如何预防

所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。虽然进程在运行过程中,可能发生死锁,但死锁的发生也

2016-12-14 19:31:40 279

原创 堆和栈的区别

一、堆栈空间分配区别:1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。二、堆栈缓存方式区别:1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;2、堆是存放在二级缓存中,生命周

2016-12-13 18:46:49 363

原创 静态库与动态库的区别与优缺点

静态链接文件    目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的

2016-12-12 17:15:01 8257

原创 TCP与UDP的区别

TCP(传输控制协议):1)提供IP环境下的数据可靠传输(一台计算机发出的字节流会无差错的发往网络上的其他计算机,而且计算机A接收数据包的时候,也会向计算机B回发数据包,这也会产生部分通信量),有效流控,全双工操作(数据在两个方向上能同时传递),多路复用服务,是面向连接,端到端的传输;2)面向连接:正式通信前必须要与对方建立连接。事先为所发送的数据开辟出连接好的通道,然后再进行数据

2016-12-11 19:16:30 232

原创 线程与进程之间的区别与联系

线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(3)线程是处理器调度的基本单位,但进程不是.4)二者均可并发执行.进程和线程都是由操作系统所体会的程序运行的基本单元,系

2016-12-10 19:49:42 260

原创 字符串的一个功能设计

对于一个字符串,和字符串中的某一个位置,设计一个算法,将包括i在内的的左侧部分移动到右边,右边部分移动到左边。#include#include void change(char * a,char *b,int m,int n){int i = 0;n++;while(a[i] != '\0'){b[i] = a[n+i];i++;}for(i

2016-12-09 19:35:19 257

原创 UDP网络编程客户端部分

/*****************************************************copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. File name:Author:fhb    Version:0.1    Date: Description:Funcion List: ******

2016-12-08 20:09:00 200

原创 UDP网络编程服务器部分

/*****************************************************copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. File name:Author:fhb    Version:0.1    Date: Description:Funcion List: ******

2016-12-07 21:48:28 210

原创 数据库的一个小程序

#include  #include  #include  #include  #define N 512    void menu();int create_table(sqlite3 *db);int delete_record(sqlite3 *db);int update_record(sqlite3 *db);int insert_reco

2016-12-06 17:11:23 1688

原创 TCP三次握手的过程

TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urge

2016-12-05 20:15:11 154

原创 TCP协议的网络编程

TCP_server.c:#include #include #include #include #include #include int main(){int listenfd,connfd;int n;int i;struct sockaddr_in servaddr,cliaddr;socklen_t clilen;

2016-12-04 20:19:13 283

原创 多线程练习

子线程循环 3 次,接着主线程循环 6 次,接着又回到子线程循环 3 次,接着再回到主线程又循环6 次,如此循环50次,试写出代码。比较简陋,最好加上上锁解锁的操作/*****************************************************copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 

2016-12-03 18:46:55 188

原创 多线程练习,售票系统。

#include #include #include #include int ticket = 10;void *sell_ticket1(void){    while(1){if(ticket > 0){sleep(1);printf("sell ticket--> chool ticket:%d\n",--ticket);

2016-12-02 15:57:51 502

原创 线程练习2

#include #include #include //static int a=4;int a = 1;void *create(void *arg){    printf("new pthread ... \n");    printf("a=%d

2016-12-01 21:35:59 265

中级软件开发工程师考试资料

包括2012-2016历年真题以及解析,以及软考所需知识点讲解,模拟练习题等

2018-04-24

空空如也

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

TA关注的人

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