linux网络与系统编程
小麦大大
写写代码纪录生活
展开
-
Linux动态库和静态库
Linux原创 2022-08-22 15:41:06 · 225 阅读 · 0 评论 -
Token验证介绍
http翻译 2022-07-23 15:15:21 · 1684 阅读 · 0 评论 -
Socket中的bind函数与C++11中的std::bind冲突
1、解决方案该函数是绑定Socket, 而在C++11中增加了std::bind(_Fp &&__f, _BoundArgs &&__bound_args…) 函数, 可以用该函数绑定函数指针, 当在C++类中添加了using namespace std;之后,如果你想调用socket.h中的bind方法则会出现问题, 使得bind函数调用不是你想要的行为。解决方案是在使用socket.h的bind函数的类中不要使用using namespace std还可以这样 ::b转载 2022-05-28 18:39:10 · 431 阅读 · 0 评论 -
c++ 序列化和反序列化
1. 什么是序列化?程序猿在编写应用程序的时候往往须要将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的还有一台计算机上以实现通讯。这个将程序数据转化成能被存储并传输的格式的过程被称为“序列化”(Serialization),而它的逆过程则可被称为“反序列化”(Deserialization)。简单来说,序列化就是将对象实例的状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它依据流重构对象。这两个过程结合起来,能够轻松地存储和数据传输。比如,能够序列化一个对象,然翻译 2020-11-20 11:02:58 · 2354 阅读 · 0 评论 -
网络协议入门(七层)
我们每天使用互联网,你是否想过,它是如何实现的?问题的提出全世界几十亿台电脑,连接在一起,两两通信。北京的某一块网卡送出信号,深圳的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗?为了使各种不同的计算机之间可以互联,ARPANet指定了一套计算机通信协议,即TCP/IP协议( 族 ),它们对电脑如何连接和组网,做出了详尽的规定。理解了这些协议,就理解...翻译 2020-04-01 20:56:38 · 351 阅读 · 0 评论 -
Vim配置方案
vim配置主要有以下优点:1.按F5可以直接编译并执行C、C++、java代码以及执行shell脚本,按“F8”可进行C、C++代码的调试2.自动插入文件头 ,新建C、C++源文件时自动插入表头:包括文件名、作者、联系方式、建立时间等,读者可根据需求自行更改3.映射“Ctrl + A”为全选并复制快捷键,方便复制代码4.按“F2”可以直接消除代码中的空行5.“F3”可列出当前目录文件,...转载 2019-02-19 20:21:42 · 180 阅读 · 0 评论 -
多进程并发服务器
多进程并发服务器在 Linux 环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的优点是当客户有请求时,服务器能及时处理客户,特别是在客户服务器交互系统中。对于一个 TCP 服务器,客户与服务器的连接可能并不马上关闭,可能会等到客户提交某些数据后再关闭,这段时间服务器端的进程会阻塞,所...原创 2019-02-03 15:45:42 · 1588 阅读 · 0 评论 -
Linux多线程很简单
多线程服务器多线程服务器是对多进程的服务器的改进,由于多进程服务器在创建进程时要消耗较大的系统资源,所以用线程来取代进程,这样服务处理程序可以较快的创建。据统计,创建线程与创建进程要快10100倍,所以又把线程称为“轻量级”进程。线程与进程不同的是:一个进程内的所有线程共享相同的全局内存、全局变量等信息,这种机制又带来了同步问题。以下是多线程服务器模板:示例代码如下:#includ...转载 2019-02-03 15:30:06 · 350 阅读 · 0 评论 -
epoll使用很简单
epoll的使用epoll是在 2.6 内核中提出的,是之前的 select() 和 poll() 的增强版本。相对于 select() 和 poll() 来说,epoll 更加灵活,没有描述符限制。epoll 使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的 copy 只需一次。epoll 操作过程需要三个接口,分别如下:...转载 2019-02-03 14:44:16 · 1847 阅读 · 3 评论 -
Linux系统编程(dup()和dup2())
作用:dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件。这个过程类似于现实生活中的配钥匙,钥匙相当于文件描述符,锁相当于文件,本来一个钥匙开一把锁,相当于,一个文件描述符对应一个文件,现在,我们去配钥匙,通过旧的钥匙复制了一把新的钥匙,这样的话,旧的钥匙和新的钥匙都能开启这把锁。对比于 dup(), dup2...转载 2019-01-27 19:27:57 · 795 阅读 · 0 评论 -
Linux系统编程(文件操作)
文件描述符在 Linux 的世界里,一切设备皆文件。我们可以系统调用中 I/O 的函数(I:input,输入;O:output,输出),对文件进行相应的操作( open()、close()、write() 、read() 等)。打开现存文件或新建文件时,系统(内核)会返回一个文件描述符,文件描述符用来指定已打开的文件。这个文件描述符相当于这个已打开文件的标号,文件描述符是非负整数,是文件的标识...转载 2019-01-27 17:31:14 · 698 阅读 · 0 评论 -
Linux系统编程(Linux系统调用)
系统调用概述这系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给内核,待内核把...转载 2019-01-27 17:05:15 · 544 阅读 · 0 评论 -
Linux编译器安装Vscode
在Windows下用VS用了2年,在Linux下用了Vim半年,第一次安装Vscode,被虐的哭笑不得,写一篇博客来纪录纪录吧。1、安装步骤:1.1安装Ubuntu Make:sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-makesudo apt-get updatesudo apt-get install ubuntu-make...原创 2019-01-26 23:15:09 · 10178 阅读 · 4 评论 -
Linux系统编程FIFO()
命名管道的概述无名管道,由于没有名字,只能用于亲缘关系的进程间通信多。为了克服这个缺点,提出了命名管道(FIFO),也叫有名管道、FIFO 文件。命名管道(FIFO)不同于无名管道之处在于它提供了一个路径名与之关联,以 FIFO 的文件形式存在于文件系统中,这样,即使与 FIFO 的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过 FIFO 相互通信,因此,通过 FIFO 不相...翻译 2019-01-09 19:59:31 · 5116 阅读 · 0 评论 -
Linux 网络编程(网络字节序、地址转换)
字节序字节序是指多字节数据的存储顺序,在设计计算机系统的时候,有两种处理内存中数据的方法:大端格式、小端格式。小端格式(Little-Endian):将低位字节数据存储在低地址。大端格式(Big-Endian):将高位字节数据存储在低地址。举个简单的例子,对于整形 0x12345678,它在大端格式和小端格式的系统中,分别如下图所示的方式存放:下面例子为确定主机的字节序:#i...转载 2019-01-30 16:42:15 · 999 阅读 · 0 评论 -
HTTP协议浅析(上):简介
1. Web服务器WWW是 World Wide Web (环球信息网)的缩写,也可以简称为 Web,中文名字为“万维网”。Web服务器(也称WWW服务器)一般指网站服务器,主要功能是提供网上信息浏览服务。Web服务器使用HTTP(超文本传输协议)与客户机浏览器进行信息交流。2. HTTP协议超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上...转载 2019-02-10 15:27:36 · 185 阅读 · 0 评论 -
HTTP协议浅析(中)
1.1 服务器测试代码服务器测试代码:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <...转载 2019-02-10 15:45:23 · 322 阅读 · 0 评论 -
RPC协议
疑问:第一次见到RPC这个名词是在做游戏开发,那时候为了请求客户端发来的数据,看了这个名词,当时一脸懵逼,例如:rpc “int” "id ",请求客户端的id。就写一篇根于RPC协议的解释。1、远程过程调用协议(RPC)RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议...翻译 2019-07-13 20:10:48 · 210 阅读 · 0 评论 -
Linux系统编程——进程的介绍
进程我们平时写的 C 语言代码,通过编译器编译,最终它会成为一个可执行程序,当这个可执行程序运行起来后(没有结束之前),它就成为了一个进程。这边可以用while(1)卡主去观察程序是存放在存储介质上的一个可执行文件,而进程是程序执行的过程。进程的状态是变化的,其包括进程的创建、调度和消亡。程序是静态的,进程是动态的。在 Linux 系统中,操作系统是通过进程去完成一个一个的任务,进程是管...转载 2019-04-28 16:58:39 · 189 阅读 · 0 评论 -
Linux 编译器之 GCC
GCC编辑器是指我用它来写程序的(编辑代码),而我们写的代码语句,电脑是不懂的,我们需要把它转成电脑能懂的语句,编译器就是这样的转化工具。就是说,我们用编辑器编写程序,由编译器编译后才可以运行!GCC(GNU Compiler Collection,GNU 编译器套件),是由 GNU 开发的编程语言编译器。GCC 原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如 Linu...转载 2019-04-28 16:37:25 · 264 阅读 · 0 评论 -
协程
协程协程,又称微线程,纤程。英文名Coroutine。协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用。子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和...翻译 2019-04-02 16:54:21 · 96 阅读 · 0 评论 -
同步与异步
同步与异步同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。这种情况下,用户不能关闭界面,如果关闭了,即迁移程序就中断了。异步:将用户请求放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览器了。然后程序再慢慢地去写入数据库去。这就是异步。但是用户没有卡死的...翻译 2019-03-26 15:04:40 · 94 阅读 · 0 评论 -
Linux静态IP配置
第一步,Linux下查看IP$ sudo vim /etc/network/interfaces修改文件(具体路径随系统而异),将ens33设为同一网段下的新IP,这里我设为192.168.5.64。(同一网段的IP计算方法是,IP和子网掩码and运算结果一致,比如192.168.5.63和255.255.255.0求and得到192.168.5.0,具体知识参考计算机网络教材的IP部分)...转载 2019-02-19 21:51:31 · 247 阅读 · 0 评论 -
vim调试GDB
参数列表 #include &lt;stdio.h&gt;void debug(char *str){ printf("debug info :%s\n",str );}int main(int argc,char *argv[]){ int i,j; j=0; for(i=0;i&lt;10;i++) { j+=5;转载 2019-02-19 20:37:55 · 1257 阅读 · 0 评论 -
HTTP面试题(简单总结一下)
Http与Https的区别:1、HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头2、HTTP 是不安全的,而 HTTPS 是安全的3、HTTP 标准端口是80 ,而 HTTPS 的标准端口是4434、在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层5、HTTP 无法加密,而HTTPS 对传输的数据进行加密6...翻译 2019-02-23 13:54:37 · 625 阅读 · 0 评论 -
Linux系统编程pipe()
管道的概述管道也叫无名管道,它是是 UNIX 系统 IPC(进程间通信) 的最古老形式,所有的 UNIX 系统都支持这种通信机制。无名管道有如下特点:1、半双工,数据在同一时刻只能在一个方向上流动。2、数据只能从管道的一端写入,从另一端读出。3、写入管道中的数据遵循先入先出的规则。4、管道所传送的数据是无格式的,这要求管道的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息...翻译 2019-01-09 19:11:59 · 7120 阅读 · 0 评论 -
Linux系统编程vfork()
头文件:#include <sys/types.h>#include <unistd.h>pid_t vfork(void);功能:vfork() 函数和 fork() 函数一样都是在已有的进程中创建一个新的进程,但它们创建的子进程是有区别的。返回值:成功:子进程中返回 0,父进程中返回子进程 ID。pid_t,为无符号整型。失败:返回 -1。for...翻译 2019-01-09 18:30:28 · 296 阅读 · 0 评论 -
Linux系统编程 fork()
头文件:#include <sys/types.h>#include <unistd.h>pid_t fork(void);功能:用于从一个已存在的进程中创建一个新进程,新进程称为子进程,原进程称为父进程。返回值:成功:子进程中返回 0,父进程中返回子进程 ID。pid_t,为无符号整型。失败:返回 -1。失败的两个主要原因是:1)当前的进程数已...原创 2019-01-09 18:08:56 · 228 阅读 · 0 评论 -
操作系统基础(存储管理)
一、填空1.将作业相对地址空间的相对地址转换成内存中的绝对地址的过程称为 地址重定位 。2.使用覆盖与对换技术的主要目的是 提高内存的利用率 。3.存储管理中,对存储空间的浪费是以 内部碎片 和 外部碎片 两种形式表现出来的。4.地址重定位可分为 静态重定位 和 动态重定位 两种方式。5.在可变分区存储管理中采用最佳适应算法时,最好按 尺寸 法来组织空闲分区链表。6.在分页式存储管理的...翻译 2018-09-20 04:10:50 · 6016 阅读 · 0 评论 -
操作系统(进程篇)
一、填空1.进程在执行过程中有三种基本状态,它们是 运行 态、 就绪 态和 阻塞 态。2.系统中一个进程由 程序 、 数据集合 和 进程控制块(PCB) 三部分组成。3.在多道程序设计系统中,进程是一个 动 态概念,程序是一个 静 态概念。4.在一个单CPU系统中,若有5个用户进程。假设当前系统为用户态,则处于就绪状态的用户进程最多有 4 个,最少有 0 个。注意,题目里给出的是假设当前...翻译 2018-09-20 03:12:20 · 12622 阅读 · 0 评论 -
操作系统基础知识
填空1.计算机系统由 硬件 系统和 软件 系统两大部分组成。2.按功能划分,软件可分为 系统 软件和 应用 软件两种。3.操作系统是在 裸机 上加载的第一层软件,是对计算机硬件系统功能的 首次 扩充。4.操作系统的基本功能是 处理机(包含作业) 管理、 存储 管理、 设备 管理和 文件 管理。5.在分时和批处理系统结合的操作系统中引入“前台”和“后台”作业的概念,其目的是 改善系统功能,...翻译 2018-09-19 16:24:07 · 571 阅读 · 0 评论 -
elect、poll、epoll优缺点
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用...翻译 2018-09-10 13:54:37 · 6665 阅读 · 0 评论 -
IO多路复用之epoll总结
1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。 2、epoll接口 epoll操作过程需要三个接口,分别如下:#include...翻译 2018-09-10 13:37:31 · 165 阅读 · 0 评论 -
同步和异步,区别
同步:同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。这种情况下,用户不能关闭界面,如果关闭了,即迁移程序就中断了。异步:将用户请求放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览器了。然后程序再慢慢地去写入数据库去。这就是异步。但是用户没有卡死...翻译 2018-09-11 15:29:28 · 213 阅读 · 0 评论 -
进程间通信(IPC)------消息队列
1、消息队列 有一个队列,队列中存放各种消息。每个进程都可以把数据封存在消息中,再放入队列。 每个进程都可以拿到消息队列,再从中取出/放入消息。 消息队列不会产生覆盖问题,但需要考虑队列长度。消息队列的编程步骤: 1 生成key,使用ftok()或用头文件定义 2 创建/获取消息队列 msgget() 3 发送/接收消息 msgsnd() / ms...翻译 2018-08-17 00:33:16 · 194 阅读 · 0 评论 -
HTTP与HTTPS的区别
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安...转载 2018-08-18 22:50:58 · 112 阅读 · 0 评论 -
HTTP
一.HTTP协议版本HTTP1.0与HTTP1.1的区别主要体现在以下几个方面: 1. HTTP1.0是短连接、HTTP1.1是长连接。 2. 增加请求头和响应头。(什么是请求头和响应头?等下我会上图说明) 3. 客户端不同请求之间是异步的。(个人理解,这里的异步并不是指客户端可以同时处理多个请求,而是当一个请求执行过程中遇等待情况时,可以...原创 2018-08-18 22:35:52 · 126 阅读 · 0 评论 -
线程同步
1.1 线程同步 因为多线程共享进程的资源,在访问共享的资源时,就有可能出现互相覆盖的情况,叫共享数据冲突。解决共享数据冲突的技术叫线程同步,解决方案就是把共享资源的访问代码由并行改为串行,其他代码无所谓。线程同步会降低线程的效率,因此使用时不是范围越大越好。 互斥锁/互斥量就是其中的一种方案。我们可以在访问共享资源时加上互斥锁,访问共享资源结束后释放互斥锁,就可以把并行改为串行。确...翻译 2018-08-14 04:54:59 · 84 阅读 · 0 评论 -
堆和栈的区别
主要的区别由以下几点: 1、管理方式不同; 2、空间大小不同; 3、能否产生碎片不同; 4、生长方向不同; 5、分配方式不同; 6、分配效率不同;1.管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak(内存泄漏)。2.空间大小:一般来讲在32位系统下,堆内存可以达...翻译 2018-12-19 16:22:58 · 100 阅读 · 0 评论 -
epoll原理图解
流 I\O操作 阻塞流可以进行I\O操作的内核对象文件、管道、套接字……流的入口:文件描述符(fd)所有对流的读写操作,我们都可以称之为IO操作。那么当一个流中再没有数据,read的时候,或者说 在流中已经写满了数据,再write,我们的IO操作就 会出现一种现象,就是阻塞现象阻塞非堵塞阻塞等待: 空出大脑可以安心睡觉。(不占用CPU宝贵的时间片)非阻塞,忙轮询: ...原创 2018-12-29 22:32:03 · 28578 阅读 · 10 评论