![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 88
shanghx_123
努力成为一名优秀的程序员
展开
-
Linux---创建进程(fork和vfork的区别)
fork函数首先来看下函数原型:#include <unistd.h> //头文件 pid_t fork(void); //返回值:成功时父进程返回子进程的id,子进程返回0;失败时父进程返回-1我们可以用一段程序来测试fork函数的特点#include<stdio.h>#include&原创 2018-08-28 16:10:20 · 2179 阅读 · 0 评论 -
Linux系统编程---进程间通信-管道
从今天开始,我们来系统总结下Linux下进程之间通信的方式。在此之前,我们来谈谈进程间为什么要进行通信?进程间通信目的数据传输:一个进程需要将它的数据发送给另一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控...原创 2018-11-27 16:39:14 · 411 阅读 · 0 评论 -
Linux系统编程---进程间通信-命名管道
命名管道命名管道,意思就是给他指明了名字,他打破了匿名管道只能具有亲缘关系之间进行通信的缺陷,它是一种特殊的“文件”。命名管道提供了一个路径名与之关联,以 FIFO 的文件形式存在于文件系统中,所以当两个不具有亲缘关系进程要通信时,只需要访问路径名即可。命名管道的特点1、FIFO 在文件系统中作为一个特殊的文件而存在,但 FIFO 中的内容却存放在内存中。2、当使用 FIFO 的进程退出后...原创 2018-11-27 22:15:41 · 285 阅读 · 0 评论 -
Linux系统编程---进程间通信-消息队列
消息队列消息队列也是一种进程间通信方式,它提供了两个不相关进程间传递数据的方式。消息队列实际上是操作系统在内核为我们创建的一个链式队列,通过这个队列的标识符key,多个进程可以通过向队列中添加节点或获取节点来进行数据传输。这个队列中的节点有一个消息类型来标识不同进程所发送或接受的数据类型。消息队列的生命周期随内核。内核为每个IPC对象维护了一个数据结构消息队列结构:消息队列有关操作...原创 2018-12-07 19:08:29 · 306 阅读 · 0 评论 -
Linux系统编程---线程控制
线程是Linux系统编程的核心,今天来好好总结下线程的操作函数创建线程#include <pthread.h>//头文件int pthread_create( pthread_t *thread,const pthread_attr_t *attr,、void *(*start_routine)(void *),void *arg );功能:创建一个线程参数: thr...原创 2018-12-09 16:44:43 · 835 阅读 · 0 评论 -
HTTP中的cookie和session
1、什么是cookie和sessionhttp协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的。为了使得web能够产生一些动态信息,就需要保存”状态”,而cookie和session机制就是为了解决http协议无状态而产生。cookie是一种在客户端保存状态的方案,session是一种在服务器端保存状态的方案。2、cookie和session的区别我们举个栗子来描述一下cooki...转载 2018-12-22 15:03:03 · 1718 阅读 · 0 评论 -
https到底安全在哪里?
对称加密算法都说http是不安全的,http是明文传输,也就是说http在两个主机之间传输的信息都是没有经过加密的,那给他加个密不就好了。于是就有了对称加密算法。对称加密算法指的是加密和解密用的是同一个密钥。每次进行数据传输前,都是先对要传输的数据进行加密,然后对方再进行解密。虽然加密和解密算法是公开的,但那个密钥是保密的, 当收到密文时,只有通过密钥才可以解密。但是这个密钥怎么才能安全的...原创 2019-01-16 16:19:14 · 19368 阅读 · 11 评论 -
Linux系统编程---生产者消费者模型
生产者消费者模型(PC模型)生产者消费者模型,其实已经很熟悉了,但真正让程序把它跑起来,这里面还有不少细节需要我们注意。生产者消费者模型,可以归结为一个123,即1个场所,2个对象,3种关系。它的过程就是 一个生产者生产数据放进缓冲池,消费者从缓冲池中取数据消费,在这期间,生产者生产数据和消费者消费数据两者不能同时进行,即放的时候不能拿,拿的时候不能放,必须是其中一个操作结束之后,才可以进行...原创 2019-02-25 18:34:50 · 475 阅读 · 0 评论 -
HTTP1.0/1.1和HTTP2.0的区别
HTTP1.0和HTTP1.1的一些区别1.缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。2.带宽优化及网络连接的使用,H...原创 2019-04-09 09:06:05 · 448 阅读 · 0 评论 -
Linux网络编程---解决TIME_WAIT状态引起的bind失败的方法
好几天都没写博客了,感觉落后了别人一大截,今天赶紧来补补。废话不多说,知己而进入正题。首先我们得明白,有些情况下,在server的TCP连接没有完全断开之前是不允许重新监听可能是不合理的例如:服务器需要处理非常大量的客户端的连接(每个连接的生存时间可能很短, 但是每秒都有很大数量的客户端来请求). 这个时候如果由服务器端主动关闭连接(比如某些客户端不活跃, 就需要被服务器端主动清理掉),...原创 2018-11-21 11:29:18 · 2486 阅读 · 0 评论 -
Linux网络编程---I/O多路复用之select
1.I/O多路复用(IO multiplexing)我们之前讲了I/O多路复用和其他I/O的区别,在这里,我们再具体讨论下I/O多路复用是怎么工作?I/O 多路复用技术就是为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用。select(),poll(),epoll()都是I/O多路复用的机制。I/O多路复用通过一种机制,可以监视多个描述符...原创 2018-11-07 22:49:41 · 1473 阅读 · 0 评论 -
Linux系统编程---进程等待
进程等待1.为什么需要进程等待我们知道,子进程退出,父进程如果不管不顾,那么子进程就可能变为僵尸进程,进而占用系统资源,造成内存泄漏,另外,进程一旦变成僵尸状态,那就刀枪不入,“杀人不眨眼”的kill-9也无能为力,因为谁也办法杀死一个已经死去的进程。有时候我们需要知道父进程派给子进程的任务完成的如何如,子进程运行完成,结果对还对,或者是否正常退出。在这些情况,我们需要等待子进程执行完。...原创 2018-11-02 12:30:29 · 315 阅读 · 0 评论 -
Linux下如何从用户态切换到内核态?
首先我们得明白什么是用户态和内核态?明白这两个概念之前,我们得知道用户空间和内核空间。用户空间:指的就是用户可以操作和访问的空间,这个空间通常存放我们用户自己写的数据等等;而内核空间则是系统内核来操作的一块空间,这块空间里面存放系统内核的函数、接口等。不管对于Linux还是Windows, 他们都具有自己用户空间和内核空间。当一个程序运行时,如果它是在用户空间下执行,我们把此时运行得程序的这...原创 2018-10-18 19:39:10 · 19684 阅读 · 1 评论 -
Linux系统编程 ---系统调用
系统调用系统调用就是用户在程序中调用操作系统所提供的一些子功能,系统调用可以被看做特殊的公共子程序。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、进行I/0传输以及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。通常,一个操作系统提供的系统调用命令有几十乃至上百条之多。这些系统调用按功能大致可分为如下几类:设备...原创 2018-10-20 21:56:00 · 530 阅读 · 0 评论 -
Linux网络编程---详解TCP的三次握手和四次挥手
我们知道,在TCP/IP协议中,TCP协议提供可靠的连接服务,是因为它有许多保证可靠连接的机制。可以分为3个方面:1.确认应答机制:指的是不管哪一端发送数据都需要确认回复一下。2.超时重传机制,发送后等待一段时间,不管是发送失败或者是还没有收到回复,那么就认为数据传输失败了;此时将会数据重传。这个超时是递增变化,但次数有限制,超过了重传次数就认为网络断开了。3.序号/确认序号 :序号不一定从...原创 2018-10-21 18:14:41 · 1628 阅读 · 0 评论 -
Linux网络编程---详解HTTP协议
HTTP 简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP 工作原理HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过UR...原创 2018-10-26 21:56:40 · 3919 阅读 · 0 评论 -
Linux系统编程---进程终止
进程终止进程的退出有三种场景:代码运行完毕,结果正确代码运行完毕,结果不正确代码异常终止进程退出方法从main返回调用exit函数调用_exit函数ctrl + c :x信号终止其中前三种为正常退出,而第四种是异常退出。在终端可以使用命令 “echo $? ”查看进程退出码接下来我们来看进程推出的函数有哪些_exit函数#include <u...原创 2018-10-30 21:01:33 · 975 阅读 · 0 评论 -
Linux系统编程---进程替换
进程替换我们知道,在 Windows 平台下,我们可以通过双击运行可执行程序,让这个可执行程序成为一个进程;而在 Linux 平台,我们可以通过 ./ 运行,让一个可执行程序成为一个进程。但是,如果我们本来就运行着一个程序(进程),我们如何在这个进程内部启动一个外部程序,由内核将这个外部程序读入内存,使其执行起来成为一个进程呢?这里我们通过 exec 函数族实现。并且,我们通常fork一个...原创 2018-11-03 17:01:59 · 210 阅读 · 0 评论 -
Linux系统编程--实现简单shell
上个博客我们讲了进程如何替换,以及exec函数族是,接下来我们来应用这些函数以及之前学的知识来实现一个简单shell。如果不太清楚,请先看看之前的内容;1.进程创建2.进程等待3.进程替换我们先看系统的shell是如何实现?我们敲一行命令,然后按回车,这个命令就被执行,玩了之后他他又返回到原来的状态,这个命令还可以加上选项,例这些选项之间用空格间隔开。并且空格可以是多个。如下图,从...原创 2018-11-03 20:17:02 · 616 阅读 · 0 评论 -
Linux网络编程---深刻理解5种基本IO模型
Linux五种IO模型:1.阻塞IO:当kernel没有数据可读时,io调用一直阻塞,直到kernel有数据时,将数据从kernel拷贝到用户空间,io调用才返回。2.非阻塞IO:当kernel无数据可读时,io操作立即返回,当有数据可读时,将数据从kernel拷贝到用户空间才返回(拷贝过程仍然阻塞)。但需要用户进程轮询内核,直到读取到数据。3.IO多路复用:监控多个文件描述符,将多个IO阻...原创 2018-11-09 12:20:07 · 1114 阅读 · 4 评论 -
DNS查询过程
整个流程域名解析 —> 与服务器建立连接 —> 发起HTTP请求 —> 服务器响应HTTP请求,浏览器得到html代码 —> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片) —> 浏览器对页面进行渲染呈现给用户1. 域名解析以Chrome浏览器为例:① Chrome浏览器 会首先搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1...原创 2019-04-09 09:15:19 · 1602 阅读 · 0 评论