HTTP协议介绍的文章很多,但这篇写的比较详细,转载来了。
转自:
作者: 阮一峰
原文:http://www.ruanyifeng.com/blog/2016/08/http.html
HTTP协议介绍
HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点。
本文介绍 HTTP 协议的历史演变和设计思路。
HTTP协议介绍的文章很多,但这篇写的比较详细,转载来了。
转自:
作者: 阮一峰
原文:http://www.ruanyifeng.com/blog/2016/08/http.html
HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点。
本文介绍 HTTP 协议的历史演变和设计思路。
守护进程(daemon)是没有终端的,不依赖于终端的程序。
作为系统中的一个后台进程。周期性的执行某些任务,或者等待某个事件的发生。不会随用户注销而退出。
创建守护进程:不能是组长进程。
通过fork子进程,令父进程结束,
子进程setid()创建新会话,脱离控制终端。
创建互斥锁
pthread_mutex_t mutex;
使用例:
|
|
互斥锁的特点
使用互斥锁的缺点
互斥锁使用步骤:
pthread_mutex_t mutex;
pthread_mutex_init(&mutex,NULL);
pthread_mutex_lock(&mutex);
pthread_mutex_unlock(&mutex);
信号是由内核产生并发送的,
信号可以用于进程和进程之间通信,也可以用于内核和进程间的通信。
虽然我们用的最多的是用信号杀死进程。但实际上我们我们可以捕捉信号做特定处理。
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由调用者主动等待这个调用的结果。而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。
- 阻塞与非阻塞
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。作者:严肃
链接:https://www.zhihu.com/question/19732473/answer/20851256
老张爱喝茶,废话不说,煮开水。
出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
1 老张把水壶放到火上,立等水开。(同步阻塞)
老张觉得自己有点傻
2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
3 老张把响水壶放到火上,立等水开。(异步阻塞)
老张觉得这样傻等意义不大
4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)作者:愚抄 链接:https://www.zhihu.com/question/19732473/answer/23434554
同步、异步 是对 调用 来说的
阻塞、非阻塞 是对 进程或者线程 来说的
io多路复用 主要解决 同步非阻塞中反复轮询的问题,使用信号事件驱动进行回调通知
一直对CGI的概念就是客户端交由处理的具体请求事物的后台程序,看到这篇文章通俗易懂的把CGI讲解清楚,往后对自己写后台业务也会有更多理解。
文章转载自CGI
我们知道,服务端要处理用户的请求,必须通过编程语言来编写对应的处理逻辑,而你要做的不仅如此,你碰到的第一个问题就是如何接收用户的TCP请求并解析出HTTP协议格式。
OK,专业的事情交给专业的人来干。必然,我们应该用专业的Web Server(如Nginx、 Apache)来接收和解析TCP请求。而业务处理部分不可能会有开源的东西直接拿来用的,毕竟每一家公司的业务都是不同的,所以需要采用C、C++、Perl、Java、Node、Python等等编程语言来编码,并编译为一个可执行程序。(由于php等脚本语言是解释执行的,所以需要靠对应的php解释器来执行。)
说到这里,问题就来了,Web服务器如何与业务处理程序进行通信呢,以及其通信时传递数据的格式是怎么样的呢。这里就需要一套标准的协议,于是人们创造了CGI协议。 所以能处理CGI协议数据的业务处理程序,就被称为CGI程序。
Web Server和CGI程序通过环境变量、标准输入、标准输出进行通信。
协议与语言无关,只要一门语言支持标准输入、标准输入、读取环境变量,它就可以用来写CGI程序,就是说可以用bash、perl、c语言等来写。
环境变量中存放的是一次请求的相关信息,比如QUERY_STRING、
PATH_INFO、REMOTE_ADDR、REMOTE_HOST、CONTENT_TYPE、CONTENT_LENGTH、REQUEST_METHOD、SERVER_NAME等。 从标准输入读取的数据如表单中post过来的东西。
当客户端发出一个执行CGI程序的请求给服务器以后,服务器根据CGI的程序类别,决定某种数据传递方式,即服务器与CGI程序的沟通方式,这就是编写CGI程序的关键点。一般情况下,服务器与CGI程序之间是通过标准输入输出进行数据传递的。
这种通过标准输入输出来实现服务器与CGI之间的数据传递的标准,对于基于文件的UINX系统尤其适用
对服务器与CGI程序而言就是:服务器的标准输出与CGI程序的标准输入相连接,服务器标准输入与CGI的标准输出相连接。如此,就构成了一个完整的数据循环通路。
事实上,每个CGI程序的环境变量集在该CGI程序开始执行到终止,其对应的环境变量集就失效了,也就是对应环境变量集生存期与CGI程序是一致的.
find ~ -name "helloword.cpp"
grep -r "iosteam" ~
压缩格式
tar czvf test.tar.gz file1 file2 docment1 (原材料,可以是文件可以是目录,可多个)
tar zxvf test.tar.gz -C 要解压的目录
file xxx:可以查看文件的文件类型
man文档章节
如果有些命令如printf会有重名,需要查哪块具体要指定好具体章节man 3 printf
env :查看linux所有环境变量
stat:stat hello.c
查看文件属性
SSH(Secure Shell):,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH是由客户端和服务端的软件组成的:服务端是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接; 客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
从客户端来看,SSH提供两种级别的安全验证:第一种级别(基于口令的安全验证); 第二种级别(基于密匙的安全验证)。
SSH 主要有三部分组成: 传输层协议 [SSH-TRANS] ;用户认证协议 [SSH-USERAUTH] ;连接协议 [SSH-CONNECT]。
SFTP(Secure File Transfer Protocol):安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP为SSH的一部份,是一种传输文件到服务器的安全方式。在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。