01 2018 档案

(匿名)管道的读写规则
摘要:管道读写规则:1、当没有数据可读时 O_NONBLOCK disable(文件状态标志)未设置非阻塞的话 : read调用阻塞,即进程暂停执行,一直等到有数据来。O_NONBLOCK enable: 设置非阻塞模式的话,无数据可读时,read调用返回-1,errno值为EAGAIN。 总之:阻塞模式 阅读全文

posted @ 2018-01-30 15:31 wsw_seu 阅读(671) 评论(0) 推荐(0) 编辑

(匿名)管道
摘要:(匿名)管道:一种进程间通信形式。把从一个进程连接到另一个进程的一个数据流成为一个管道(固定大小内核缓冲区)。管道的限制:1、半双工(数据只能在一个方向流动)需要双方通信时,要建立两个管道; 2、只能用于共同祖先进程(具有亲缘关系的进程)通信,通常一个管道由一个进程创建,然后调用fork。 例如:l 阅读全文

posted @ 2018-01-30 11:36 wsw_seu 阅读(160) 评论(0) 推荐(0) 编辑

时间与定时器操作
摘要:三种不同精度的睡眠函数:1、unsigned int sleep(unsigned int seconds) 会被信号中断,返回剩余的秒数 int n=5; do{ n=sleep(n); }while(n>0) 确切等到5秒2、int usleep(useconds_t usec) ; 微秒最为单 阅读全文

posted @ 2018-01-30 10:47 wsw_seu 阅读(591) 评论(0) 推荐(0) 编辑

可靠信号与不可靠信号
摘要:信号是软件中断,是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。 信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进 阅读全文

posted @ 2018-01-30 10:06 wsw_seu 阅读(1802) 评论(1) 推荐(0) 编辑

信号发送接收函数:sigqueue/sigaction
摘要:信号是一种古老的进程间通信方式,下面的例子利用sigqueue发送信号并附带数据;sigaction函数接受信号并且处理时接受数据。 1、sigqueue: 新的信号发送函数,比kill()函数传递了更多附加信息,但它只能向一个进程发送信号,针对实时信号(支持排队不会丢失),与sigaction配合 阅读全文

posted @ 2018-01-29 19:11 wsw_seu 阅读(317) 评论(0) 推荐(0) 编辑

信号之sigaction函数
摘要:可靠机制,不会恢复默认信号处理程序: 新的信号安装函数sigaction:sigaction函数用于改变进程收到的特定信号后的行为 int sigaction(int signum,const struct sigaction *act,const struct sigaction *old); / 阅读全文

posted @ 2018-01-27 20:21 wsw_seu 阅读(401) 评论(0) 推荐(0) 编辑

信号之信号集操作
摘要:1、信号在内核中的表示 执行信号的处理动作称为信号递达。信号从产生到递达状态之间的状态成为未决(pending)。进程可以选择阻塞某个信号。被阻塞的信号产生时将保持在未决状态。直到进程解除对此信号的阻塞,才可以执行递达动作。 如下图,进程任务结构(PCB)中包含:信号屏蔽字64位,linux中用si 阅读全文

posted @ 2018-01-27 19:35 wsw_seu 阅读(348) 评论(0) 推荐(0) 编辑

信号之可重入函数
摘要:为了增强程序的稳定性,在信号处理函数中应使用可重入函数。 可重入函数:指的是一个可以被多个任务调度的过程,任务在调度中不必担心数据是否出错。因为进程在收到信号后,就将跳转到信号处理程序去执行。如果信号处理程序中使用了不可重入函数,那么信号处理函数可能会修改原进程中不应被修改的数据,这样进程从信号处理 阅读全文

posted @ 2018-01-27 16:49 wsw_seu 阅读(231) 评论(0) 推荐(0) 编辑

信号的发送
摘要:1、可靠信号与不可靠信号 可靠信号都是实时信号,不可靠信号都是非实时信号。实时信号都支持排队,都是可靠信号。 不可靠信号的早期问题:1、UNIX进程每次处理信号后,将对信号响应设置为默认动作,而LINUX中再次发送不会重置默认动作,继续是handler.早期解决这个问题的方法是,在信号处理程序最后继 阅读全文

posted @ 2018-01-27 16:42 wsw_seu 阅读(200) 评论(0) 推荐(0) 编辑

守护进程详解以及start-stop-daemon命令
摘要:1、概念:守护进程是在后台运行的不受终端控制的进程,通常守护进程在系统启动时自动运行,守护进程的名称通常以d结尾,比如sshd、xinetd、crond等。 2、创建守护进程的步骤:a、调用fork(),创建新进程,它会是将来的守护进程;b、在父进程中调用exit(),保证子进程不是进程组组长;(进 阅读全文

posted @ 2018-01-22 19:53 wsw_seu 阅读(3804) 评论(0) 推荐(0) 编辑

信号基本概念
摘要:1、中断 :中断源--》中断屏蔽?--》保护现场--》中断处理--》恢复现场。中断个数固定。中断向量:保存固定个数中断处理程序入口地址 硬件中断(外部中断):外设 软件中断(内部中断):程序出错或程序调用指令 2、信号:异步事件响应,有某些错误条件发生,是在软件层次上对中断的模拟。 信号、中断相似点 阅读全文

posted @ 2018-01-22 19:52 wsw_seu 阅读(232) 评论(0) 推荐(0) 编辑

常用进程调度算法(转)
摘要:首先了解一下作业与进程的区别: 一个进程是一个程序对某个数据集的执行过程,是分配资源的基本单位。作业是用户需要计算机完成的某项任务,是要求计算机所做工作的集合。一个作业的完成要经过作业提交、作业收容、作业执行和作业完成4个阶段。而进程是对已提交完毕的程序所执行过程的描述,是资源分配的基本单位。其主要 阅读全文

posted @ 2018-01-20 10:40 wsw_seu 阅读(203) 评论(0) 推荐(0) 编辑

malloc/free与new/delete的区别(转)
摘要:相同点:都可用于申请动态内存和释放内存 不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动 阅读全文

posted @ 2018-01-20 10:09 wsw_seu 阅读(112) 评论(0) 推荐(0) 编辑

最长回文子串的Manacher算法
摘要:对于一个比较长的字符串,O(n^2)的时间复杂度是难以接受的。Can we do better? 先来看看解法2存在的缺陷。 1) 由于回文串长度的奇偶性造成了不同性质的对称轴位置,解法2要对两种情况分别处理;2) 很多子串被重复多次访问,造成较差的时间效率。 缺陷2)可以通过这个直观的小🌰体现: 阅读全文

posted @ 2018-01-19 11:05 wsw_seu 阅读(156) 评论(0) 推荐(0) 编辑

IP地址转换
摘要:1 /* 2 点分十进制转32位IP 3 */ 4 #include 5 #include 6 #include 7 using namespace std; 8 bool change2Binary(const string& str) 9 { 10 int arrInt[4] = {0};//存放4个IP地址整数 192.168.1.1 11 unsigne... 阅读全文

posted @ 2018-01-18 16:18 wsw_seu 阅读(365) 评论(0) 推荐(0) 编辑

exec系列函数详解
摘要:execve替换进程映像(加载程序):execve系统调用,意味着代码段、数据段、堆栈段和PCB全部被替换。在UNIX中采用一种独特的方法,它将进程创建与加载一个新进程映像分离。这样的好处是有更多的余地对两种操作进行管理。当我们创建一个进程之后,通常将子进程替换成新的进程映像,这可以用exec系列的 阅读全文

posted @ 2018-01-17 22:38 wsw_seu 阅读(772) 评论(0) 推荐(0) 编辑

fork函数拓展
摘要:1、fork之后父子进程共享文件:文件引用计数的值改变,共享偏移。 在下面的例子中test.txt为parentchil。如果子进程没有睡眠,两个进程交叉执行,内容不可预测。 2、fork与vfork: 在fork还没有实现copy on write之前,UNIX设计者很关心fork之后立刻执行ex 阅读全文

posted @ 2018-01-16 23:00 wsw_seu 阅读(118) 评论(0) 推荐(0) 编辑

fork函数
摘要:复制进程映像:使用fork函数得到的子进程从父进程继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号当前工作目录、根目录、资源限制、控制终端等。 子进程与父进程的区别在于:1、父进程设置的锁,子进程不继承(例如对于一个排他锁,父进程设 阅读全文

posted @ 2018-01-16 21:53 wsw_seu 阅读(195) 评论(0) 推荐(0) 编辑

进程与程序
摘要:一:概念 程序是一系列有序指令的集合(代码段+数据段=未初始化数据段bss、已初始化数据段)。程序是静态的 进程(代码段+数据段+堆栈段+PCB进程控制块):从用户角度看,进程是程序的一次动态执行过程从操作系统的内核来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位进程是资源分配的最小单位 阅读全文

posted @ 2018-01-16 19:43 wsw_seu 阅读(337) 评论(0) 推荐(0) 编辑

fcntl函数用法——设置文件锁
摘要:fcntl函数。锁定文件,设置文件锁。设置获取文件锁:F_GETLK 、F_SETLK 、F_SETLKW文件锁结构,设置好用于fcntl函数的第三个参数。struct flock{ short l_type;//锁的类型 F_RDLCK,F_WRLCK(排他锁),F_UNLCK(清除锁) shor 阅读全文

posted @ 2018-01-15 20:32 wsw_seu 阅读(1415) 评论(0) 推荐(0) 编辑

fcntl函数用法——操纵文件描述符状态
摘要:fcntl函数:操纵文件描述符,改变已经打开的文件的属性int fcntl(int fd, int cmd, ... //arg );cmd选项:一、复制文件描述符:F_DUPFD二、更改设置文件描述标志:F_GETFD 、F_SETFD 文件描述符标志,是体现进程的文件描述符的状态.当前只定义了一 阅读全文

posted @ 2018-01-15 20:15 wsw_seu 阅读(616) 评论(0) 推荐(0) 编辑

fcntl函数用法——复制文件描述符
摘要:文件描述符复制和输出重定向dup() 用最小的文件描述符来复制,从0开始搜素。复制文件描述符后,最小文件描述符指向被复制描述符指向的文件。dup2(int oldfd,int newfd) 强制用newfd来复制oldfd close(1);dup(fd) == 》等价于dup2(fd,1)int 阅读全文

posted @ 2018-01-15 19:41 wsw_seu 阅读(446) 评论(0) 推荐(0) 编辑

文件共享
摘要:文件描述符指向文件表,一个进程默认打开1024个文件描述符。 文件表中保存了:文件状态标志(可读、可写、追加、同步、非阻塞等)、文件偏移量、refcnt(引用计数)、v结点指针(指向v结点表--v结点信息stat函数可以查看、i结点信息) 文件在磁盘块的位置: i结点信息. 若一个进程两次打开同一个 阅读全文

posted @ 2018-01-15 19:22 wsw_seu 阅读(151) 评论(0) 推荐(0) 编辑

stat函数
摘要:一、stat 函数,获取文件元数据 int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *path, struct stat *buf); 二、 阅读全文

posted @ 2018-01-15 18:38 wsw_seu 阅读(5259) 评论(0) 推荐(0) 编辑

字符串类的实现
摘要:#pragma once #include using namespace std; class String { public: String(const char* str = ""); String(const String& other); String& operator=(const String& other); String& operator=(... 阅读全文

posted @ 2018-01-15 09:35 wsw_seu 阅读(901) 评论(0) 推荐(0) 编辑

系统调用全过程
摘要:系统调用(SYSTEM_CALL) OS内核中都有一组实现系统调用功能的过程,系统调用就是对上述过程的调用。编程人员利用系统调用,向OS提出服务请求,由OS代为完成。一般情况下进程是不能存取系统内核的。它不能存取内核使用的内存段也不能调用内核函数,CPU的硬件保证了这一点,只有系统调用是一个例外。 阅读全文

posted @ 2018-01-14 16:42 wsw_seu 阅读(380) 评论(0) 推荐(0) 编辑

ELF文件格式内容
摘要:在计算机科学中,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。 ELF文件组成部分 ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。 阅读全文

posted @ 2018-01-14 09:54 wsw_seu 阅读(224) 评论(0) 推荐(0) 编辑

UNIX目录访问操作
摘要:1、目录访问相关函数: DIR* opendir (const char * path ); struct dirent* readdir(DIR *dirptr) ;参数是一个指向dirent 结构的指针。DIR是目录指针,读取一个目录,读取完毕返回一个空指针。 int closedir(DIR 阅读全文

posted @ 2018-01-13 21:44 wsw_seu 阅读(177) 评论(0) 推荐(0) 编辑

通过lseek产生空洞文件
摘要://off_t lseek(int fd,off_t offset, int base) 偏移量 搜索的起始位置(文件头(SEEK_SET),当前指针位置(SEEK_CUR),文件尾(SEEK_END))unistd.h#include <sys/types.h>#include <sys/stat 阅读全文

posted @ 2018-01-13 21:29 wsw_seu 阅读(230) 评论(0) 推荐(0) 编辑

lseek系统调用
摘要:文件的随机读写。目前为止,文件都是顺序访问。读写都是从当前文件的偏移位置开始,然后文件偏移值自动的增加到刚好超出读或者写结束的位置是它为下一次作好准备。在linux中有文件偏移。使得随机访问变得简单,只需将当前文件位置移植到有关位置,将迫使read()或write()函数发生在这一位置,除非文件被O 阅读全文

posted @ 2018-01-13 21:17 wsw_seu 阅读(469) 评论(0) 推荐(0) 编辑

minishell的实现
摘要:直接上各个模块的代码,注释都在文档代码中,非常详细,加上最后的Makefile文件完全可以自行运行看懂: main函数一个文件main.c setup信号安装部分在初始化模块中,分为两个部分init.h和init.c shell_loop的主循环在parse.h和parse.c这两个命令解析模块中: 阅读全文

posted @ 2018-01-13 21:06 wsw_seu 阅读(1377) 评论(0) 推荐(0) 编辑

read/write系统调用
摘要:/*拷贝文件内容实例read系统调用、write系统调用ssize_t read(int fd, void *buf, size_t count);ssize_t write(int fd, const void *buf, size_t count);//将数据写到一个文件中 一、read、wri 阅读全文

posted @ 2018-01-13 20:18 wsw_seu 阅读(1537) 评论(0) 推荐(0) 编辑

open系统调用
摘要:/* int open(const char *pathname, int flags, mode_t mode);flag:打开方式,可以man 2 open查看 O_RDONLY O_WRONLY O_RDWR O_APPEND O_CREAT O_EXCL O_TRUNC)(open时将文件内 阅读全文

posted @ 2018-01-13 20:04 wsw_seu 阅读(311) 评论(0) 推荐(0) 编辑

文件描述符与文件指针
摘要:高级IO:ANSI C提供的标准IO,通常也称为带缓冲的IO 低级IO:通常也称为不带缓冲的IO 文件描述符: 对于LINUX而言对所有设备或文件的操作都是通过文件描述符进行的。当打开一个文件的时候内核向进程返回一个文件描述符(非负)。后续对文件的操作只需要通过该文件描述符, 内核记录有这个打开文件 阅读全文

posted @ 2018-01-13 19:33 wsw_seu 阅读(204) 评论(0) 推荐(0) 编辑

C++this指针
摘要:一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。 主要作用 主要作用 一个对象的this指针并不是对象本身的一部分,不会影响sizeo 阅读全文

posted @ 2018-01-13 14:27 wsw_seu 阅读(168) 评论(0) 推荐(0) 编辑

函数压栈的过程(转 知乎)
摘要:例如:void func_A(arg_A1, arg_A2);void func_B(arg_B1, arg_B2);int main(int argc, char *argv[], char **envp){func_A(arg_A1, arg_A2);}void func_A(arg_A1, a 阅读全文

posted @ 2018-01-13 10:46 wsw_seu 阅读(5885) 评论(0) 推荐(0) 编辑

访问百度的过程(转载)
摘要:假设你用一个全新的浏览器(第一次启动的那种),访问百度(http://www.baidu.com/),在你敲入网址并按下回车之后,将会发生以下神奇的事情: 浏览器先尝试从Host文件中获取http://www.baidu.com/对应的IP地址,如果能取到当然万事大吉大家都能嗨,如果不能,就使用DN 阅读全文

posted @ 2018-01-12 16:13 wsw_seu 阅读(1517) 评论(0) 推荐(0) 编辑

栈和堆的区别(转 知乎)
摘要:①管理方式:栈由编译器自动管理;堆由程序员控制,使用方便,但易产生内存泄露。 ②生长方向:栈向低地址扩展(即”向下生长”),是连续的内存区域;堆向高地址扩展(即”向上生长”),是不连续的内存区域。这是由于系统用链表来存储空闲内存地址,自然不连续,而链表从低地址向高地址遍历。 ③空间大小:栈顶地址和栈 阅读全文

posted @ 2018-01-12 15:43 wsw_seu 阅读(396) 评论(0) 推荐(0) 编辑

epoll内核源码详解(转 作者:赛罗·奥特曼 来源:牛客网)
摘要:发现自己发的一篇面经后,很多小伙伴向我索要epoll的内核源码实现,那我就在牛客网发下这源码还有自己总结的流程. 另外 网上很多博客说epoll使用了共享内存,这个是完全错误的 ,可以阅读源码,会发现完全没有使用共享内存的任何api, 而是 使用了copy_from_user跟__put_user进 阅读全文

posted @ 2018-01-12 09:27 wsw_seu 阅读(1328) 评论(0) 推荐(0) 编辑

计算机乘法除法原理(原码 转载)
摘要:1.乘法 1.乘法 由于计算机中,所有数值都是用2的N次方来表示的:2^n0+2^n1+2^n2+2^n3+2^n4.....因此x*y,(x)*(2^n0+2^n1+2^n2+2^n3+2^n4)=(x*2^n0)+(x*2^n1)+(x*2^n2)+(x*2^n3)+(x*2^n4)+..... 阅读全文

posted @ 2018-01-10 10:35 wsw_seu 阅读(2432) 评论(0) 推荐(0) 编辑

const常量与define宏定义的区别(转)
摘要:#define RADIUS 100; const float RADIUS = 100; (1) 编译器处理方式不同 define宏是在预处理阶段展开。 const常量是编译运行阶段使用。 (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开。 const常量有具体的类 阅读全文

posted @ 2018-01-08 15:44 wsw_seu 阅读(194) 评论(0) 推荐(0) 编辑

C++如何实现多态
摘要:1. 什么是多态多态是C++中的一个重要的基础,面向对象编程语言中,接口的多种不同的实现方式即为多态。2. 多态带来的好处多态带来两个明显的好处:一是不用记大量的函数名了,二是它会依据调用时的上下文来确定实现。确定实现的过程由C++本身完成另外还有一个不明显但却很重要的好处是:带来了面向对象的编程。 阅读全文

posted @ 2018-01-08 15:28 wsw_seu 阅读(3379) 评论(0) 推荐(0) 编辑

指针与引用的区别
摘要:指针是一块内存的地址值,而引用是一块内存的别名。 从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用 阅读全文

posted @ 2018-01-08 14:58 wsw_seu 阅读(152) 评论(0) 推荐(0) 编辑

大小端字节序
摘要:1、大小端是不同的对于数据在内存地址中的存放方式,不同的处理器(平台)的数据存储方式是不同。的如果实现跨平台通信则大小端是不能忽视的问题。大端模式:数据的高位存储在内存的低字节。ARM/PowerPC等处理器采用大端模式小端模式:数据的低位存储在内存的低字节。Intel架构处理器采用小端模式。如一个 阅读全文

posted @ 2018-01-08 14:42 wsw_seu 阅读(282) 评论(0) 推荐(0) 编辑

TCP与UDP的区别
摘要:TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。UDP补充: UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。即使是出现网络拥堵 阅读全文

posted @ 2018-01-08 14:33 wsw_seu 阅读(142) 评论(0) 推荐(0) 编辑

gdb调试入门(上)
摘要:一、什么是gdb:gdb是GNU debugger的缩写,是编程调试工具二、gdb功能:1、启动程序,可根据用户要求随心所欲的运行程序(比如带参数)2、可让被调试的程序在用户指定的调试的断点处停住3、当个程序停住,可以检查程序中发生的事(比如打印变量值)4、动态改变变量程序的执行环境三、使用实例:g 阅读全文

posted @ 2018-01-07 17:05 wsw_seu 阅读(237) 评论(0) 推荐(0) 编辑

linux开发工具之Makefile(上)
摘要:一 make工具:利用make工具可以自动完成编译工作。这些工作包括:如果仅修改了某几个源文件,则指重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译二 make工具是通过一个称为Makefile的文件来完成并维 阅读全文

posted @ 2018-01-07 16:40 wsw_seu 阅读(132) 评论(0) 推荐(0) 编辑

gcc入门(下)
摘要:一 头文件与库文件(模块化,可重用,好维护)在使用C语言和其他语言进行程序设计的时候,我们需要头文件来提供对常数的定义和对系统以及库函数调用的声明库文件是一些预先编译好的函数的集合,那些函数都是按照可重用原则编写的。它们通常由一组互相关联的用来完成某项常见工作的函数构成比如用来处理屏幕现实的函数和数 阅读全文

posted @ 2018-01-07 16:02 wsw_seu 阅读(129) 评论(0) 推荐(0) 编辑

gcc入门(上)
摘要:gcc:GNU Compiler Collection的缩写。最初是作为C语言的编译器,现在已支持多种语言。Gcc支持多种硬件平台。gcc是一个可移植跨平台编译器gcc还能跨平台交叉编译器。gcc有多种语言前端,用于解析不同语言gcc按模块化设计,可以加入新语言和新CPU架构gcc是自由开源软件。二 阅读全文

posted @ 2018-01-07 15:30 wsw_seu 阅读(175) 评论(0) 推荐(0) 编辑

awk命令
摘要:一 awk简介:awk是一种用于处理数据和生成报告的编程语言awk可以在命令行中进行一些简单的操作,也可以被写成脚本来处理较大的应用问题。awk与grep\sed命令结合,使shell编程更容易linux下使用的awk是gawk二 awk如何工作:awk逐行扫描输入(可以是文件或者管道),按照给定的 阅读全文

posted @ 2018-01-07 15:03 wsw_seu 阅读(210) 评论(0) 推荐(0) 编辑

流编辑器:sed
摘要:一 简介:sed是一个精简的、非交互式的流式编辑器,它在命令行中输入编辑命令和指定文件名,然后在屏幕上查看输出。逐行读取文件内容到临时缓冲区,称为模式空间。接着用sed命令处理缓冲区内容,处理完之后,把缓冲区内容送往屏幕。接着处理下一行这样不断的重复,直到文件末尾。原文件内容并没有改变。二 简单的例 阅读全文

posted @ 2018-01-07 14:15 wsw_seu 阅读(371) 评论(0) 推荐(0) 编辑

TCP粘包问题的解决方案02——利用readline函数解决粘包问题
摘要:主要内容: 客户端程序: 服务器程序: 当我们传输如文件这种数据时,流式的传输非常适合,但是当我们传输指令之类的数据结构时,流式模型就有一个问题:无法知道指令的结束。所以粘包必须问题是必须解决的。 短连接 最简单的方法就是短连接,也就是需要发送数据的时候建立TCP连接,发送完一个数据包后就断开TCP 阅读全文

posted @ 2018-01-06 16:22 wsw_seu 阅读(773) 评论(2) 推荐(2) 编辑

TCP粘包问题的解决方案01——自定义包体
摘要:粘包问题解决方案:本质上是要在应用层维护消息与消息的边界。 1、定长包 2、包尾加\r\n(FTP协议) 3、包头加上包体长度 4、更加复杂的应用层协议 利用发送定常包解决粘包问题时,对于定长包的接收,是一个主要问题,在程序中,封装了readn(接收确切数目的读操作)与writen(发送。。。)函数 阅读全文

posted @ 2018-01-06 15:45 wsw_seu 阅读(797) 评论(0) 推荐(1) 编辑

Vi的使用
摘要:vi的使用:编辑模式下可以进行的操作光标定位、搜索字符串、替换和删除、剪切和粘贴、撤销和重复 但是不能更改文本的内容。G:光标定位到最后。搜索字符串:/str n键可以寻找下一个。dd删除光标所在行u键撤销2dd删除光标所在下两行(n)r:替换 5rm表示用5个m来替换。d$:从当前光标删除到行尾。 阅读全文

posted @ 2018-01-05 14:57 wsw_seu 阅读(121) 评论(0) 推荐(0) 编辑

TIME_WAIT状态存在的原因
摘要:TIME_WAIT状态存在有两个理由: 1、可靠地实现TCP全双工连接的中断 2、允许老的重复分节在网络中消失 第一个理由:如果客户端的ACK丢失了,服务器将会重新发送它的最终的那个FIN,因此客户端必须维护状态信息,以允许它重新发送最终的那个ACK。要是客户不维护状态信息,他将相应一个RST,该分 阅读全文

posted @ 2018-01-05 10:03 wsw_seu 阅读(849) 评论(0) 推荐(2) 编辑

IO复用之poll
摘要:主要用一个例程来讲解poll,包含客户端和服务器端。 poll函数没有FD_SETSIZE的限制 int poll(struct pollfd * fdarray, unsigned long nfds, int timeout) 客户端程序: 服务器端程序: Makefile文件 .PHONY:c 阅读全文

posted @ 2018-01-04 21:24 wsw_seu 阅读(461) 评论(0) 推荐(0) 编辑

Linux管理命令
摘要:linux:管理命令df查看分区 df后面跟路径查看该文件分区 df -h:以直观的方式显示磁盘分区使用状况 df可查看磁盘的使用状况 du可以查看目录的使用状况。free查看内存:total 物理内存 used:已使用 free:剩余的ps:用来查看当前用户启动的进程ps -aux:显示系统中所有 阅读全文

posted @ 2018-01-04 19:41 wsw_seu 阅读(219) 评论(0) 推荐(0) 编辑

bash基础
摘要:wc:-c或--bytes或——chars:只显示Bytes数;-l或——lines:只显示列数;-w或——words:只显示字数。输入重定向:wc < /etc/passwdwc << aaa> eeeeeee fffff aaa> ddfdf> aaa 2 4 27统计分隔符之内的文档内容。wc 阅读全文

posted @ 2018-01-04 09:06 wsw_seu 阅读(200) 评论(0) 推荐(0) 编辑

最短路径—Dijkstra算法和Floyd算法
摘要:1、单源点的最短路径问题:给定带权有向图G和源点v,求从v到G中其余各顶点的最短路径。 我们用一个例子来具体说明迪杰斯特拉算法的流程。 定义源点为 0,dist[i]为源点 0 到顶点 i 的最短路径。其过程描述如下: 步骤dist[1]dist[2]dist[3]dist[4]已找到的集合 第 1 阅读全文

posted @ 2018-01-03 19:24 wsw_seu 阅读(23636) 评论(0) 推荐(1) 编辑

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示