自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 TCP三次握手

TCP报文头部格式:   三次握手过程1)在TCP建立连接过程,抓到的TCP报文如下:  2)点击TCP会话,可以看到握手的三次过程 3)第一次握手过程如下:SYN = 1seq = 4113291021 4)第二次握手过程如下: SYN = 1ACK =0ack =4113291022seq =794831355 5)第三次握手过程如下:  ACK = 1ack = 794831356seq =...

2018-05-28 23:10:12 230

原创 利用抓包工具分析数据帧具体内容

在博文网络基础知识有一幅图介绍以太网数据帧的封装与解封过程,改图如下:图-数据的封装与解封过程 在本篇博文中将学习利用转包工具查看数据帧中具体内容。 抓包工具:科来网络分析系统8.01) 抓过HTTP报文界面如下:2)点击物理会话后,界面如下:从界面中可以看到HTTP内容分为HTTPGET 和HTTP Text,猜测HTTP GET为HTTP的建立过程,本篇博文不研究HTTP建立过程,所以不细究3...

2018-05-28 21:52:54 15621

原创 TCP服务器客户端程序框架

1. TCP服务器端流程2. TCP客户端流程 3. TCP/IP服务器端与客户端框架  示例代码: TCP服务器端:/************************************************************************* @Author: wanghao @Created Time : Fri 25 May 2018 08:09:19 PM PDT @...

2018-05-28 19:13:48 2089

原创 atoi与atol

NAME      atoi, atol, atoll, atoq - convert a string to an integer SYNOPSIS      #include <stdlib.h>       int atoi(const char *nptr);      long atol(const char *nptr);      long long atoll(cons...

2018-05-28 18:46:34 1773

原创 TCP/IP网络编程-系统调用

网络编程相关API1. socket() 创建套接字2. bind() 绑定本机地址和端口3. connect() 建立连接4. listen() 设置监听套接字5. accept() 接收TCP连接6. recv(),read(),recvfrom() 数据接收7. send(),write(),sendto() 数据发送8. close(),shutdown()关闭套接字 1. socket(...

2018-05-26 12:46:11 568

原创 TCP/IP网络编程基础知识

1. Socket1)Socket简介a)一种编程接口,用于不同计算机之间通信的接口b)一种特殊的文件描述符c)并不局限于TCP/IP协议d)面向连接和面向无连接的Socket都存在e)独立于具体协议,TCP和UDP都可以使用2)Socket类型a) 流式套接字(SOCK_STREAM)提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送发送且按发送顺序接收。内设置流量控制。数据被看作是字节...

2018-05-26 10:33:51 9106

原创 网络基础知识

在Linux进程与进程间通信中,学到以下进程间通信方式:管道、信号、共享内存、消息队列、信号量。但是这些通信方式限于本地计算机,如何解决不同计算机中进程间通信的问题?这就需要学习网络。Linux网络主要基础知识如下:1. TCP/IP协议体系结构2. TCP/IP协议3. TCP和UDP协议 1. TCP/IP协议体系结构,该体系结构分四层,每层常见的协议列举如下:注:FTP文件传输协议,PING...

2018-05-25 20:38:22 246

原创 信号

1. 信号通信1) 信号是一种异步通信方式,是软件层次上对中断机制的一种模拟。2) 信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。3) 如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复再执行再传递给它;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程。 2. 用户进程对信号的相应...

2018-05-24 14:24:42 219

原创 IPC对象之信号量

1. 信号量1)信号量(semaphore),也叫信号灯。它是不同进程间或一个给定进程内部不同线程间同步的机制。2)二值信号量:值为0或1。与互斥锁类似,资源可用时值为1,不可用时值为0。3)计数信号量:值在0到n之间。同来统计资源,其值代表可用资源数。4)等待操作是等待信号量的值变为大于0,然后将其减一;而释放操作则相反,用来唤醒等待资源的进程或者线程。 2. 信号量编程函数在Linux系统中,...

2018-05-24 10:50:23 738

原创 IPC对象之消息队列

1. 消息队列1)消息队列由消息队列ID来唯一标识。2)消息队列就是一个消息的列表。用户可以在消息队列中添加消息、读取消息等。3)消息队列可以按照类型来发送/接收消息。4)消息队列的操作包括创建或打开消息队列、添加消息、读取消息和控制消息队列。5)创建或打开消息队列使用的函数是msgget,这里创建的消息队列的数量会受到系统消息队列数量的限制。6) 添加消息使用的函数msgsnd,按照类型把消息添...

2018-05-23 21:08:17 424

原创 IPC对象之共享内存

1. 共享内存特点1)共享内存是一种最为高效的进程间通信方式,进程可以知点解读写内存,而不需要任何数据的拷贝。2)为了在多个进程间交换信息,内核专门留出了一块内存,可以由需要访问的进程将其映射到自己的私有地址空间。3)进程可以直接读写这一块内存而不需要进行数据的拷贝。4)由于多个进程共享一段内存,因此需要依靠某种同步机制,如互斥锁和信号量等。 2. 共享内存实现1)创建/打开共享内存2)映射共享内...

2018-05-23 19:54:37 309

原创 无名管道pipe与有名管道fifo

一、无名管道pipe:1. 无名管道特点:1)只能用于具有亲缘关系的进程之间的通信。2)半双工的通信模式,具有固定的读端和写端。3)管道可以看成是一种特殊的文件,对于它的读写可以使用文件IO如read、write函数。 2.管道创建与关闭1)管道是基于文件描述符的通信方式。当一个管道建立时,它会创建两个文件描述符fd[0]和fd[1]。其中fd[0]用于读,fd[1]用于写管道。2)构成了一个半双...

2018-05-23 18:57:32 627

原创 Linux线程互斥

1. 线程间互斥1)通过互斥锁达到线程互斥的目的2)互斥锁的目的是用来保证共享数据操作的完整,3)保护临界资源,即任何时刻最多只能有一个线程能访问该资源4)线程必须先获得互斥锁才能访问临界资源,访问完资源后释放该锁。如果无法获得锁,线程会阻塞直到获得锁为止。 2. 互斥函数函数pthread_mutex_init()头文件:#include<pthread.h>函数原型:int pth...

2018-05-22 21:45:52 146

原创 Linux线程同步

1. 线程间同步同步 (synchronization)指的是多个任务(线程)按照约定的顺序相互配合完成一件事。 2.线程间同步-P/V操作1) 信号量代表某一类资源,其值表示系统中该资源的数量2) 信号量是一个受保护的变量,只能通过三种操作来访问       a)初始化       b)P操作(申请资源)       c)V操作(释放资源)3)信号量的值为非负整数4) P(S) 操作和 V(S)...

2018-05-22 20:44:49 167

原创 Linux线程

1、线程基础1)每个用户进程有自己的地址空间2)系统为每个用户进程创建一个task_struct来描述该进程              该结构体中包含一个指针指向该进程的虚拟地址空间映射表(0 – 4G)3)task_struct与虚拟地址空间映射表一起用来表示一个进程4)由于进程的地址空间是私有的,因此在进程间上下切换时,系统开销较大5)为了减少系统开销增加系统效率,引进轻量级进程,也称为线程6...

2018-05-22 19:30:44 136

原创 文件锁

 在Linux中为防止多个进程同时更新文件从而导致数据丢失,或者防止文件内容在未更新完毕时被读取并引发后续问题,需要某种机制,这种机制就是“文件锁”。在linux中多用fcntl()实施文件锁。fcntl()的功能可分为读锁和写锁两种。其中读锁又称为共享锁,它用来防止进程读取的文件记录被更改。记录内可设置多个读锁,但当有一个读锁存在的时候就不能在该记录区域设置写锁。写锁又称为排斥锁,在任何时刻只能...

2018-05-21 21:33:29 212

原创 Linux守护进程

Linux守护进程1) 守护进程也称为Daemon进程,是Linux中的后台服务进程。守护进程用于执行特定的系统任务。守护进程的生命周期较长,一些守护进程在系统引导时启动,一直运行至系统关闭。2) Linux系统大多数服务都是用守护进程实现的。 1. 查看系统中的守护进程ps -axj父进程ID       PPID进程ID          PID进程组ID       PGID会话期ID   ...

2018-05-21 20:36:47 253

原创 wait() 与 waitpid()

wait和waitpidwait函数调用该函数使进程阻塞,直到任一个子进程结束【SIGCHLD】或者是该进程接收到了一个信号为止。如果该进程没有子进程或者其子进程已经结束,wait函数会立即返回。头文件:#include<sys/types.h>                     #include<sys/wait.h>函数原型: pid_t wait(int *st...

2018-05-21 19:35:10 253

原创 exit() 与 _exit()

当需要结束一个进程的时候,可以使用exit()函数或_exit()函数来终止该进程。当程序运行到exit()函数或_exit()函数时,进程会无条件停止剩下的所有操作,并进行清理工作,最终将进程停止。 头文件:#include<stdlib.h>函数原型:void exit(int status)函数参数:status 表示让进程结束时的状态,默认使用0表示正常结束返回值:无 头文件:...

2018-05-21 18:55:08 861

原创 exec函数族

问题:如果用fork 创建一个进程,但是进程必须是想要执行的另外一个程序? exec函数族提供了一种在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。在执行完之后,原调用进程的内容除了进程号外,其他全部都被替换了。装载的程序可以使 linux许可的 程序或者脚本。 头文件:#include<unistd.h>...

2018-05-21 18:48:00 107

原创 进程创建-fork()

进程创建:fork()函数所需头文件:#include<sys/types.h>                     #include<unistd.h>函数原型:pid_t fork()函数参数:无函数返回值:       0     子进程         >0   父进程,返回值为创建出的子进程的PID       -1   出错fork()函数用于从一个已...

2018-05-20 21:29:44 556

原创 进程基础

进程相关概念:1. 进程的基本概念进程是一个独立的可调度的任务。进程是一个程序的一次执行的过程。 2. 进程与程序的区别1)程序是静态的,它是保存在磁盘上的一些指令的有序集合,没有任何执行的概念;进程是动态的,它是程序执行的过程,包括创建、调度、消亡。2)进程是一个独立的可调度的任务,是一个抽象实体,当系统在执行某个程序时,系统会分配和释放各种需要的资源。进程不仅包括程序的指令和数据,还包括程序计...

2018-05-20 21:06:28 358

原创 判断文件结束方式

判断文件结束有三种方式:a) char p[1024];while(fgets(p, 1024, src) != NULL)fputs(p, dest); b) intc;while((c= fgetc(src)) != EOF)fputs(c, dest); c)while((n= fread(s, 1, 20, src)) != 0){       fwrite(s, 1, n, dest);...

2018-05-20 19:59:05 1826

原创 利用fgets实现行数读取

 首先在shell下man fgets。#include <stdio.h>char*fgets(char *s, int size, FILE *stream);函数参数:s:存放输入字符的缓冲区地址size:输入的字符串长度stream:输入文件流 属性:fgets()  reads in at most one less than size characters from str...

2018-05-20 19:18:12 6359 1

原创 向log文件打印date

向一个log文件打印行号和date在项目中经常用到,所以本篇博客将程序贴在此处,以后如果在项目中应用到,可以直接拿来应用。 例程:进程向log文件每隔1秒写入一行序号和date,如果进程中断,下次再启动该进程时,能够接续上次的序号。 程序如下:/************************************************************************* @Au...

2018-05-19 17:51:52 869

原创 Linux目录操作

这篇博客主要学习Linux下的目录操作,Linux遍历目录的一般方法是:打开目录 ->读取 ->关闭目录,相关函数如下:opendir -> readdir -> closedir还可以通过stat函数查看打开文件的信息。 这几个函数如何应用,本篇博客通过一个例程来说明。例程:读取一个路径下所有文件以及子目录下所有的文件,并打印文件信息。程序如下:/************...

2018-05-19 16:47:38 160

原创 输入缓冲区与输出缓冲区

本博文通过一段程序来理解输入缓冲区与输出缓冲区。程序如下:/************************************************************************* @Author: wanghao @Created Time : Thu 17 May 2018 06:03:12 AMPDT @File Name: test.c @Description:...

2018-05-17 23:24:34 8719 1

原创 标准IO

标准IO,ANSIC 指定的标准,这一组API【一组函数】的参数返回值类型可以在多个平台上运行,包括linux windows。 标准IO和文件IO比较如下: 如果查看某个文件需要哪些头文件,直接(man 3 函数名)查看。想成为一个Linux高手应该学会使用man 手册查看全部函数的使用!FILE*fopen(const char *path, const char *mode);FILE *f...

2018-05-17 20:49:26 511

原创 文件IO

文件IOopen()/creat()/close()/read()/write()/lseek() 文件IO可以操作普通的磁盘文件,也可以操作设备文件,Linxu专用。 文件操作一般步骤打开文件读写文件关闭文件#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h> int open(constchar...

2018-05-15 21:35:07 159

原创 快排算法代码

/************************************************************************* @Author: wanghao @Created Time : Sat 12 May 2018 02:22:56 AM PDT @File Name: qsort.c @Description: **************************...

2018-05-15 19:52:32 956

原创 排序

排序一、排序的基本概念与分类1、排序的定义假设含有n个记录的序列为{r1,r2,……rn},其相对应的关键字分别为{k1,k2,……kn},需确定一种序列,使其关键字满足k1<=k2<=……<=km(非递减)或k1>=k2>=……>=km(非递增)关系,即使得序列成为一个按关键字有序的序列{r1,r2,……,rm},这样的操作就称为排序。排序的依据是关键字之间的...

2018-05-15 19:50:40 153

原创 常用的查找算法代码

#include <stdio.h>#include <stdlib.h>int number[11]={0,12,16,24,35,47,59,62,73,88,99};//待查表,第一个元素是哨兵位而不是待查数据,待查数据从下标1(第二个元素)开始int Sequential_Search(int *a,int n,int key){    int i;    for(...

2018-05-15 19:47:33 298

原创 查找

查找一、查找概论各位都用过搜索引擎。搜索引擎的大概工作原理就是利用网络“爬虫”抓取并复制网页,并且可以通过该网页的链接来抓取更多的网页。那么,搜索引擎的是通过什么来抓取网页的呢?就是通过“关键字”来识别网页并抓取网页的。 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。查找表(Search Table)是由同一类型的数据元素(或记录)构成的...

2018-05-15 19:45:49 248

原创 赫夫曼树与赫夫曼编码

二叉树的应用——赫夫曼树与赫夫曼编码1、赫夫曼树赫夫曼(David Huffman,也译为“哈夫曼”),美国数学家,他在1952年发明了赫夫曼树与赫夫曼编码。赫夫曼编码是当代压缩和解压缩技术的基础。我们通过一个具体的示例来体会一下什么叫赫夫曼树(Huffman Tree)。给定一个成绩(0~100),输出所对应的分数段。我们可以通过以下代码来实现:if(a<60)       printf(...

2018-05-15 19:42:14 782

原创 二叉树的建立与排序

一、树的定义:1、定义:树(Tree)是n(n>=0)个节点的有限集,n=0时称为“空树”。在任意一棵非空树中:⒈有且仅有一个特定的称为根(root)的节点。⒉当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1、T2……Tm,其中每一个集合本身又是一棵树,并且称之为根的子树(SubTree)。2、树的节点的分类:树的节点包含一个数据元素以及若干个指向其子树的分支。节点拥...

2018-05-15 18:21:54 1350

原创 简易通讯录

项目描述:编写简易通讯录,要求使用“链表”这种存储结构,并附带相关操作。需要功能:1、使用链表存储联系人的相关信息,包括姓名、性别、电话号码、注释等,链表形式不限(推荐使用单链表,推荐事先准备一些数据)2、有输出通讯录全部信息的功能3、有清空通讯录的功能4、有用户交互界面5、有插入新联系人信息的功能6、有查找联系人的功能,包括“按姓名查找”和“按电话号查找”两种7、有删除联系人的功能,包括“按姓名...

2018-05-14 20:54:56 289

原创 链式队列

环境:gcc目的:链式队列练习功能:1. 建立链式队列2. 判空4. 入队列5. 出队列 /************************************************************************* @Author: wanghao @Created Time : Thu 10 May 2018 07:31:27 PMPDT @File Name: link...

2018-05-14 15:29:56 176

原创 顺序循环队列

环境:gcc目的:顺序循环队列练习功能:1. 建立顺序循环队列2. 判空3. 判满4. 入队列5. 出队列6. 求队列长 /************************************************************************* @Author: wanghao @Created Time : Thu 10 May 2018 12:45:40 AMPDT ...

2018-05-14 15:28:30 531

原创 链式栈

环境:gcc目的:顺序栈练习功能:1. 创建栈2 . 入栈3. 出栈 /************************************************************************* @Author: wanghao @Created Time : Wed 09 May 2018 10:42:01 PMPDT @File Name: linklist.c @De...

2018-05-13 22:56:13 113

原创 顺序栈

环境:gcc目的:顺序栈练习功能:1. 创建栈2 . 入栈3. 出栈  /************************************************************************* @Author: wanghao @Created Time : Wed 09 May 2018 08:29:13 PMPDT @File Name: stack.c @Desc...

2018-05-13 22:51:46 163

空空如也

空空如也

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

TA关注的人

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