linux
linux相关知识
weixin_kab777
这个作者很懒,什么都没留下…
展开
-
awk:A和B文件的重复数据处理
找出A和B中相同的数据并输出awk ‘NRFNR{a[$0]++} NR>FNR&&a[$0]’ A Bawk 'NRFNR{a[$0]} NR>FNR {if($1 in a) print $0 }’ A B在A中找出B中没有的内容并输出awk ‘NR==FNR{a[$0]} NR>FNR{if(!($1 in a)) print $0}’ B A...原创 2020-10-24 21:24:23 · 378 阅读 · 0 评论 -
IO复用--epoll系统调用
epoll系统调用epoll是Linux特有的I/O复用函数。它在实现和使用上与select、 poll有很大差异。首先,epoll使用一组函数来完成任务,而不是单个函数。其次,epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中,从而无须像select和poll那样每次调用都要重复传入文件描述符集或事件集。但 epoll 需要使用一个额外的文件描述符,来唯一标识内核中的这个事件表。...原创 2020-01-17 19:00:29 · 156 阅读 · 0 评论 -
IO复用--poll系统调用
poll系统调用poll系统调用和select类似,也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有已就绪的文件描述符,pool原型如下:#include<poll.h>int poll(struct pollfd *fds,nfds_t nfds,int timeout);1.fds参数是一个pollfd结构类型的数组,它指定所有我们感兴趣的文件描述符上发生的可读...原创 2020-01-17 17:48:44 · 187 阅读 · 0 评论 -
IO复用--select系统调用
IO复用客户端程序要处理多个socket。(例如非阻塞的connect)客户端程序要同时处理用户输入和网络连接。(如聊天室程序)服务器要同时处理监听socket和连接socket。服务器要同时处理TCP请求和UDP请求。服务器要同时监听多个端口或者处理多种服务。select APIselect系统调用的用途是:在一段指定时间内,轮询监听用户感兴趣的文件描述符上的可读、可写和异常...原创 2020-01-16 18:35:09 · 250 阅读 · 0 评论 -
测试Mybash功能
在测试中,rm命令有一些存在问题,功能都可以实现,但在恢复删除的文件之时,回收站中的文件全会被恢复到当前路径的.trash中,并且可能存在一些不需要恢复的文件,所以我们可以选择在确定不需要一些文件的时候就直接清空回收站,并且每次恢复完成后需要手动从.trash中提取一下文件。当然,我们也可以在恢复之后选择从.trash中挑选出我们需要的文件同样也很方便。...原创 2020-01-07 20:56:52 · 88 阅读 · 0 评论 -
Mybin命令
clearclear----clear the terminal screen 清空终端屏幕#include<stdio.h>int main(){ fputs("\x1b[2J\x1b[H",stdout); return 0;}解析简单两行代码就实现了清屏功能,那么稀奇古怪的字符都代表了什么呢?其实这些都是VT100里面的控制码,所谓VT100,是一个终端类...原创 2019-12-22 17:41:02 · 491 阅读 · 0 评论 -
Mybash框架
Mybash简单地说,就是用我们自己实现的命令去代替系统的一些命令,比如ls、pwd、clear、su等。先说一下系统是怎么调用命令的吧。比如我们常用的ls,我们发现它存在/bin目录下,是绿色的可执行程序,包括cp、rm、pwd等那么,系统又是如何知道这些命令存在/bin目录下的呢?我们知道又一个名词叫做 PATH环境变量,它其实就是一些配置的目录路径,操作系统在执行你输入的命令时就会去...原创 2019-12-21 17:54:47 · 120 阅读 · 0 评论 -
多进程&多线程/进程池&线程池
多进程多线程多进程或者多线程下的服务器/客户端交互:有客户链接时,系统为这个客户创建出进程或者线程,当与客户端交互完成时,创建进程或线程也就随之释放。应用场景:进程之间时相互独立的,不存在数据安全。进程相对于线程而言,创建时,开辟的资源多,CPU调度时比较慢。如果多进程要通讯,必须要借助特定的手段(信号,信号量,共享内存,管道,消息队列)Linux上进程能创建的数量相比于系统进程数量小...原创 2020-01-17 15:23:28 · 138 阅读 · 1 评论 -
linux网络编程:简单实现Web服务器
通过上篇HTTP协议的博客,大致对HTTP协议有了一些了解。那么,我们简单使用一下它做个HTTP服务器吧。说是HTTP服务器,其实在底层来说也无非就是一个TCP协议实现的服务器。整个流程:当你在浏览器(客户端)输入网址点下回车的那一刻:客户端----请求建立TCP连接—>服务器成功连接 : 到这里需要RTT的时间用于连接客户端---->-HTTP请求报文----->...原创 2019-12-16 20:54:12 · 1500 阅读 · 0 评论 -
linux网络编程:HTTP协议
HTTP协议基本概念: 超文本传输协议 HTTP是基于TCP/IP通信协议来传递数据的应用层的协议 HTTP的服务器和客户端都相当于一个应用程序:客户端通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的;服务器通过接受客户端的请求并向客户端发送HTTP响应数据。 HTTP使用同一资源标识符(Uniform Resource Identifiers,URI)来传输数据和建立连接...原创 2019-12-08 22:57:12 · 260 阅读 · 0 评论 -
linux网络编程:UDP编程
UDP:无连接的 不可靠的 数据报服务服务器客户端创建套接字socket创建套接字socket指定自己的端口号和IP地址指定服务器的IP地址和端口号绑定/命名套接字bind发送数据sendto接受数据recvfrom发送确认数据sendto接受确认数据recvfrom对此,我们发现UDP不是像TCP那样靠三次握手来建立...原创 2019-12-08 16:57:40 · 74 阅读 · 0 评论 -
linux网络编程:TCP编程下篇
通过中篇我们学习TCP通过三次握手建立连接。那么本篇我们先来说说关闭连接。1.四次挥手原理:服务器 客户端<<—(FIN seq=i)----<<—close()->>------(ACK=i+1)---------->>->>----(FIN seq=j)----------->>-<&...原创 2019-12-07 21:40:37 · 81 阅读 · 0 评论 -
linux网络编程:TCP编程中篇
分析服务器客户端通信过程通过上篇我们大体上学习到了服务器与客户端编程的步骤。现在我们来具体分析一下他们之间进行通信时都发生了什么?服务器客户端服务器创建套接字客户端创建套接字创建服务器地址信息结构体绑定IP地址端口号等创建服务器地址信息结构体绑定IP地址端口号等服务器绑定套接字信息,指定地址信息结构体服务器创建监听队列客户端请求与服务器连...原创 2019-12-02 00:01:48 · 79 阅读 · 0 评论 -
linux网络编程:TCP编程上篇
TCP编程开始服务器客户端依靠套接字来实现,那么什么叫套接字呢?套接字就相当于我们使用的电话,服务器和客户端都需要这样一个工具是实现网络通信。套接字:socket不论是服务器,还是客户端,我们在创建套接字时,都需要指定协议簇,具体使用的协议类型等,那么让我们开始吧!服务器:首先我们需要创建一个套接字那么我们就需要头文件#include<sys/socket.h>然后...原创 2019-12-01 16:17:20 · 91 阅读 · 0 评论 -
网络编程前言
计算机网络:网络:将主机连起来就可以构成一个网络互联网:将网络连起来就构成了互联网IP地址:可以唯一标识一台主机MAC:也可以唯一标识一台主机,是物理地址不可改变,虽然也可以标识,但是寻找起来就很困难,所以显然没有IP地址的灵活方便。端口:可以标识主机中的进程,即就是应用程序的代号OSI七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层五层/四层模型:应用层、传输...原创 2019-12-01 14:43:44 · 81 阅读 · 0 评论 -
线程2
线程同步线程之间协同工作,用于多线程访问临界资源时,必须按照一定的先后顺序访问执行。1.线程级的信号量#include<semaphore.h>sem_t sem;//类型初始化 int sem_init(sem_t *sem,int shared,int val);P操作int sem_wait(sem_t *sem);V操作int sem_post(sem_t ...原创 2019-11-08 16:31:48 · 91 阅读 · 0 评论 -
线程1
1.线程的概念:线程是轻量级的进程,是进程内部的一条执行序列(一组有序指令),或者说是执行流,一个进程至少有一条线程,即就是main函数所代表的执行序列称之为主线程,通过线程库可以创建线程。2.线程与进程的区别:(1)进程是资源分配的单位,线程是CPU调度执行的单位。(2)多进程,进程间资源都是独立的,同一进程内的线程是资源共享的。(3)线程更加轻便,更小巧,线程创建调度,切换效率高。...原创 2019-11-03 20:53:12 · 106 阅读 · 0 评论 -
exec系列进程替换
exec系列进程替换函数可以把当前进程替换为一个新进程,新进程由path或者file参数指定。(可以将一个程序的执行切换到另一个程序的执行)#include<unistd.h>extern char** environ;int execl(const char *path, const char *arg, ..., (char *)0);int execlp(const...原创 2019-12-21 22:02:52 · 166 阅读 · 0 评论 -
系统调用及底层文件访问
每个运行中的程序被称为进程,它有一些与之关联的文件描述符。这是一些小值整数,可以通过它们访问打开的文件或设备。有多少文件描述符可用取决于系统的配置情况。当一个程序开始运行时,一般会有3个已经打开的文件描述符: 0:标准输入 1:标准输出 2:标准错误系统调用1.write系统调用write的作用就是把缓冲区buf的前nbytes个字节写入与文件描述符fildes关联的文件中。它返回...原创 2019-12-23 15:45:16 · 144 阅读 · 0 评论 -
fork
fork进程复制1.父子进程如果B进程是由A进程fork复制出来的,那么我们就说A时B的父进程,B是A的子进程。2. fork函数 pid_t fork(void);返回值:失败返回-1;而成功调用后有两个返回值,子进程返回0,父进程返回子进程的pid。拓展:getpid 可以得到当前进程的pidgetppid 可以得到当前进程父进程的pid子进程创建成功后:代码执行的位置:...原创 2019-12-21 21:39:03 · 199 阅读 · 0 评论