- 博客(32)
- 收藏
- 关注
原创 linux下文件分析的头文件
stat#include<sys/stat.h>int stat(const char *restrict pathname,struct stat *restrict buf);int fstat(int fields,strcut stat *buf);int lstat(const char *restrict pathname,struct stat *restrict...
2019-11-14 08:48:36
174
原创 STL的API
vectorvectot的构造函数vector<T> v;vector(v.begin(),v.end());//将区间内的元素给赋值给自身vector(n,elem);//将n个elem元素复制给自身vector(const vector& vec);//拷贝构造函数vector赋值操作:assign(begin(),end());//将区间的元素拷贝给本身...
2019-11-13 19:51:07
385
原创 Linux下服务器编程学习(十七):HTTP服务器请求
#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<assert.h>#include<cstdio>#include<cstdlib>#include<unistd.h>#include<errno...
2019-10-15 20:09:23
148
原创 小心Static和const的坑
staticstatic 局部变量:将变量声明为函数的的局部变量,那么这个变量再函数执行之后不会被释放,而是继续保留再内存中。static 全局变量:表示一个变量 能再当前文件的全局中访问。static函数:表示一个函数只能再当前文件中访问;static类成员变量:表示这个成员变量为整个类所有。static类成员函数:表示这个函数为全类所共有,而且只能访问静态成员变量const1.c...
2019-10-15 15:54:56
279
原创 Linux下的网络编程学习(九):高级I/O函数
高级I/O函数 1、用于创建文件描述符的函数,pipe、dup/dup2 2、读写数据的函数,readv/writev、sendfile、mmap/munmap、splice、tee 3、用于控制I/O行为和属性的函数,fcntlpipe函数 pipe函数用于创建一个管道,实现进程间的通信。pipe函数如下:#include<unistd.h>int pipe(i...
2019-10-15 15:24:00
163
1
原创 Linux下的网络编程学习(十六):epoll系统调用
epoll系列系统调用 epoll是Linux系统特有的I/O复用函数。不同于select,poll,epoll是通过使用一组函数完成任务,epoll把用户关心的文件描述符上的事件放在内核的一个事件表里面,所以无需每次调用都要重复传入文件描述符或事件集;文件描述符:用来唯一描述内核中的事件集使用以下函数创建:#include<sys/epoll.h>int epoll_cre...
2019-10-14 20:13:19
145
原创 Linux下的多进程编程学习(一):fork和exec系列函数调用
进程间的通信方式 管道、信号量、消息队列、共享内存fork系统调用 fork系统调用是复制进程映像的系统调用,#include<sys/types.h>#include<unistd.h>pid_t fork(void);fork函数的调用都返回两次,父进程返回的是子进程的PID,子进程中返回0;fork函数复制当前的进程,在内核进程表中创建一个新...
2019-10-14 13:36:31
816
原创 Linux下的网络编程学习(十六):poll系统调用
poll系统调用 poll系统调用和select类似,是再一定的时间内轮询一定数量的文件描述符,以测试其中是否有就绪者。poll原型如下:#include<poll.h>int poll(struct pollfd* fds, nfds_t nfds,int timeout)fds是一个pollfd结构类型的数组,指定了感兴趣的文件描述符上发生的可读、可写、异常等事件。po...
2019-10-11 20:19:50
145
原创 Linux下的网络编程学习(十五):HTTP请求的读取和分析
#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<assert.h>#include<cstdio>#include<cstdlib>#include<unistd.h>#include<errno...
2019-10-11 20:00:40
465
原创 Linux下的网络编程学习(十四):文件描述符就绪条件
文件描述符就绪条件 判断文件描述符是否可读、可写、异常影响着select,而以下的情况sokcet是可读的:1、socket内核接收缓存区中的字节数大于或等于其低水位SO_RCVLOWAT.读操作的字节数大于0;2、socket通信的对方关闭连接;对socket的读操作返回值为0;3、监听socket上由新的请求;4、socket上由未处理的错误;可以使用getsockopt读取和清除...
2019-10-11 15:48:01
588
原创 Linux下的网络编程学习(十三):Select的API
Select select的调用用途:在一段指定的时间内,监听用户感兴趣的文件描述符上的可读、可写、异常等事件。select API#include<sys/select.h>int select (int nfds, fd_set* readfds,fd_set* writefds,fd_set* exceptfds,struct timeval timeout);...
2019-10-11 14:33:47
202
原创 Linux下的网络编程学习(十二):Linux服务器规范
日志 1、Linux服务器一般以后台程序运行,后台进程又称为守护进程,该类进程没有控制终端,守护进程的父进程通常是pid为1的进程。 2、Linux服务器有自己的日志系统,大部分后台进程都在var/log目录下拥有自己的进程。 3、Linux服务器一般以专门的非root身份运行, 4、Linux服务器一般是可配置的。大多数配置文件放置再/etc下 5、Linux服务器通常再启动...
2019-10-10 11:12:46
122
原创 Linux下的网络编程学习(十):高级I/O函数(5):tee函数
tee函数tee函数再两个管道文件描述符之间复制数据,也是零拷贝,不消耗数据,源文件描述符上的数据仍然可以用于后续的读操作。#include<fcntl.h>ssize_t tee(int fd_in,int fd_out,size_t len,unsigned int flags)该函数的用发和splice相同同时输出数据到终端和文件的程序代码如下:#include&l...
2019-10-09 19:30:12
256
原创 Linux下的网络编程学习(十一):高级I/O函数(4):mmap和splice
mmap函数和munmap函数 mmap函数用于申请内存空间。该空间可以作为进程间通信的共享内存,也可以将文件映射到该内存中。munmap函数是释放该空间。#include<sys/mman.h>void* mmap(void *start,size_t length,int prot , int flags,int fd,off_t offset);int munmap(v...
2019-10-09 18:41:07
279
原创 Linux下的网络编程学习(十):高级I/O函数(3):sendfile
sendfile函数 sendfile函数再两个文件描述符之间直接传递数据,由于该传递是在内核中,从而避免了缓冲区和用户缓冲区之间的数据拷贝,效率高。#include<sys/senfile.h>ssize_t sendfile(int out_id,int in_fd,off_t* offset,size_t cout);in_fd:待读出内容的文件描述符。out_fd...
2019-10-09 15:35:37
94
原创 Linux下的网络编程学习(十):高级I/O函数(2):readv和writev
readv函数和writev函数 readv函数将数据从文件描述符读取到分散的内存块中,即分散读;writev则将多块分散的数据一并写入文件描述符中,即集中写。#include<sys/uio.h>ssize_t readv(int fd,const struct iovec* vector,int count);ssize_t writev(int fd,const str...
2019-10-08 19:31:38
243
原创 Linux下的网络编程学习(八):网络信息(API)
gethostbyname和gethostbyaddr gethostbyname函数是根据主机名获取主机的信息,gethostbyaddr函数根据IP地址获取主机的完整信息。这两个函数如下:#include<netdb.h>struct hostent* gethostbyname(const char* name);struct hostent* gethostbyadd...
2019-09-30 14:50:05
192
原创 LInux下的网络编程(七续):socket选项
SO_RCVLOWAT和SO_SNDLOWAT 这两个选项分别表示了TCP接收缓冲区和发送缓冲区的低水位标准,一般在I/O复用时判断socket可读还是可写。当TCP接收缓冲区的可读数据大于其低水位标准时,I/O复用系统通知应用程序可以从socket上读取数据;TCP发送缓冲区的空闲空间大于其低水位标准,I/o复用系统通知向socket上写数据。SO_LINGER 用来控制close系统...
2019-09-30 08:02:48
154
原创 Linux下网络编程(七):socketapi(有关socket 选项)
socket选项 特意用来读取和设置socket文件描述符属性的方法:#include<sys/socket.h>int getsockopt(int sockfd,int level, int option_name,void* option_value,socklen_t* restrict option_len);int setsockopt(int sockfd, i...
2019-09-29 10:52:14
182
原创 Linux下的c++系统检测工具:网络编程小插曲
常常用来检测服务器行为的工具tcpdump,nc, strace, lsof, vmstat, ifstat, mpstat.tcpdumptcpdump是一款经典的网络抓包工具,还有常用的Wireshark。tcpdump的参数提供了大量的选项:-n:使用IP地址表示主机,使用数字表示端口号;-i:指定要监听的网卡接口,“-i any”表示抓取所有网卡接口上的数据包。-v:输出一个稍...
2019-09-27 16:59:32
125
原创 c++回顾(三):细节学习
c++重载运算符和重载函数 c++允许同一作用域的某个函数和运算符指定多种定义,这就是重载。重载声明是指一个与之前已经在该作用域声明过的函数具有相同函数名字,但是参数列表和函数的实现不同。可重载和不可重载的运算符如下:...
2019-09-27 15:33:59
127
原创 c++回顾(二)
类的构造函数 构造函数是c++的一种特殊函数:每次在创建类的新对象时执行;构造函数的名字和类名完全相同,没有任何的返回类型,类的构造函数可以给某些成员变量创造初始值。例子如下:#include <iostream>using namespace std;class line { public: void setlength(double len); double ge...
2019-09-27 14:49:16
195
原创 Linux下c++网络编程(七):socket api学习
带外标记Linux检测到紧急标志时,将通知应用程序有带外数据需要接收。内核通知应用程序带外数据到达时的两种常见方式,1、I/O复用产生的异常事件2、SIGURG信号;以下函数实现定位带外数据流的具体位置。#include<sys/socket.h>int sockatmark(int sockfd);该函数用来判断传进来的socket是否带有带外标记,如果读取的数据含有带...
2019-09-27 09:36:58
246
原创 Linux下网络编程(六):socket api 之UDP的发送和接收和通用接口
UDP的数据接收和发送socket编程接口中用于UDP数据报读写的系统调用,#include<sys/types.h>#include<sys/socket.h>ssize_t recvfrom(int sockfd,void* buf,size_t len,int flags,struct sockaddr* src_addr,socklen_t* addrlen...
2019-09-27 08:56:50
880
1
原创 c++回顾(一)
c++的类 c++中的封装指的就是创建c++的类。 C语言中的struct与c++中的class类似:结构体是一种构造类型,可以包含多种变量,每个变量有相同的性质,但是不能包含成员函数;而c++中的类也是一种构造类型,其中类的成员不只是包含成员变量,还能包含成员函数,而通过类定义出的变量,称为”对象“。 通过类名,创建类的对象的过程叫做类的实例化,因此类的对象也叫做实例。同时,c++的...
2019-09-26 19:50:36
150
原创 Linux下的网络编程学习(五):socket api的TCP数据读写
TCP的读写 有关TCP的socket编程接口的读写如下:#include<sys/types.h>#include<sys/socket.h>ssize_t recv(int sockfd,void buf,size_t len ,int flags);ssize_t send(int sockfd,const void buf,size_t len,int ...
2019-09-25 20:34:59
243
原创 Linux下的vim配置文档.vimrc
// File Name: accept.cpp// Author: simon li// Created Time: 2019年09月25日 星期三 08时23分48秒#include<vector>#include<list>#include<map>#include<set>#include<deque>#incl...
2019-09-25 11:18:20
317
原创 Linux下的 socket api学习
// File Name: socket.cpp// Author: simon li// Created Time: 2019年09月23日 星期一 17时01分07秒#include<vector>#include<list>#include<map>#include<set>#include<deque>#incl...
2019-09-24 16:53:33
249
原创 Linux下网络编程学习手册(三):有关TCP的描述
TCP的特点 两大重要的传输协议:TCP协议、UDP协议,相比较而言,TCP比UDP协议的优点是面向连接的、可靠的、字节流。 使用TCP协议通信的双方首先要建立连接,连接双方必须为此次连接提供内核资源,用来管理数据的传输,全双工(同时进行读写)。 一些基于广播的和多播的应用程序是无法使用TCP协议的。最好的选择是面向无连接的UDP协议。发送端:由于TCP模块将数据都放入缓冲区中,当发送...
2019-09-24 15:17:30
181
原创 Linux下网络通信编程(二):有关IP的详细描述
IP 协议的详细描述IP服务特点 IP协议为上层的协议提供了无状态、无连接、不可靠的服务。 无状态:IP通信的双方不同步传输数据的状态信息,有关数据报的传输过程和接收过程都是独立的,没有上下文关系的。缺点:无法处理乱序和重复的IP数据报。优点:简单高效。 对于IP通信来说,当接收端只要确认接收到的数据报是完整的(多个数据报<数据报太大,只能分片发送>或者单个数据报)...
2019-09-24 14:22:00
130
原创 Linux下网络编程学习(一):网络通信
学习随笔:TCP/ip 协议族TCP/ip是Internet使用的主流协议族,是分层的多协议的通信体系(参考资料:RFC文档)TCP/IP是四层的协议系统:应用层,运输层,网络层,数据链路层,通讯过程如下图所示四层架构的简介数据链路层数据链路层主要是实现网卡网络驱动程序,处理数据在物理媒介的传输,而不同的物理媒介有不同的电气特性,网络驱动程序隐藏这些细节,是使用者更好的使用网络。 ...
2019-09-24 09:42:24
669
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人