
linux
blog_w
与其临渊羡鱼,不如退而求网
展开
-
socket---TCP通信
TCP通信流程的编写:通信流程:Server:1.创建套接字2.为套接字绑定地址信息3.开始监听告诉系统可以开始处理客户端的连接请求。系统会为每一个新客户创建一个新的套接字4.获取新建连接5. 收发数据(使用的是新建的套接字)6. 关闭套接字Client:1.创建套接字2. 为套接字绑定地址信息(不推荐主动绑定)3.向服务端发起连接请求(开始监听之后)4.收发数据5.关闭套接字接口认识:1.创建套接字:int socket(int domain, int type, in原创 2021-12-29 15:31:45 · 1253 阅读 · 0 评论 -
socket---UDP通信
通信流程:Server:1.创建套接字 — 在内核中创建一个socket结构体2.为套接字绑定地址信息在创建套接字创建的socket结构体中加入IP+PORT信息1.告诉操作系统主机收到的哪些数据应该交给当前的这个socket2.确定发送数据的源端地址信息3.接收数据当前进程从指定的socket接收缓冲区中取出数据4.发送数据将要发送的数据放到socket发送缓存区中,内核选择合适时候封装发送5.关闭套接字Client:1.创建套接字2.为套接字绑定地址信息 (大多数情况下会原创 2021-12-09 19:21:31 · 2206 阅读 · 0 评论 -
进程信号---阻塞信号
阻塞: 信号依然可以注册,只是暂时阻止信号被处理。在pcb中还有一个信号集合—阻塞集合;哪个信号在这个集合中被标记,则表示这个信号要阻塞,收到了这个信号则暂时不去处理。int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);//how:操作类型---要对阻塞集合进行的操作//SIG_BLOCK:将set集合中的信号添加到阻塞结合;block|=set//SIG_UNBLOCK:从阻塞结合中移除set中的信号 block &a原创 2021-12-07 10:41:25 · 969 阅读 · 0 评论 -
进程信号----自定义处理方式
处理: 说白了就是打断进程当前操作,然后执行信号的处理函数,执行完毕后回到原来的主控流程继续运行。处理方式:默认处理方式:执行默认的处理方式忽略处理方式:信号依然会注册只是处理方式变为空操作自定义处理方式:自己定义信号处理函数,修改信号的处理函数指针 #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<signal.h> void sigcb(int no)原创 2021-11-28 22:56:56 · 338 阅读 · 0 评论 -
进程信号---kill命令
进程信号:原理:是一种中断机制,或者说是一种事件通知机制,在这里讲的是软件中断,通过信号通知进程发生了某个事件,打断进程当前的操作,去处理事件。一个信号对应一个事件,并且信号必须能够被识别Linux下信号种类:使用kill -l命令进行查看,62种1~31号:非可靠信号;34-64号:可靠信号信号的生命周期:产生,注册,注销,处理产生:硬件产生: ctrl+c,ctrl+\,ctrl+z软件产生: kill命令发送一个信号给进程;示例: kill -sigid pidkill杀死进程原创 2021-11-28 22:25:16 · 961 阅读 · 0 评论 -
进程间通信---共享内存
共享内存:目的: 用于进程间的数据共享原理: 开辟一块物理内存空间,各个进程将同一块物理内存空间映射到自己的虚拟地址空间中,通过虚拟地址进行访问,进而实现数据共享共享内存是最快的进程间通信方式,因为通过虚拟地址空间映射后,直接通过虚拟地址访问物理内存,相较于其他方式少了两部数据拷贝操作。操作流程:1.创建或打开共享内存int shmget(key_t key, size_t size, int shmflg);key:标识符—通过相同的标识符,多个进程可以打开同一块共享内存;size:要创建原创 2021-11-15 16:39:39 · 193 阅读 · 0 评论 -
进程间通信--命名管道
命名管道:可以用于同一主机上任意进程间通信—管道缓冲区具有标识符命名管道:mkfifo filename 创建一个管道文件命名管道本质上依然是内核中的一块缓存区,但是命名管道有名字具有标识符,而这个标识符就是一个可见于文件系统的管道类型文件,多个进程可以通过打开同一个管道文件访问同一块内核中的缓冲区实现通信代码操作:int mkfifo(char *path,int mode);对管道的读写操作,仍然是IO操作打开特性:若以只读方式打开命名管道文件,则会阻塞,直到这个管道文件被以写的方式打开原创 2021-11-09 17:01:15 · 283 阅读 · 0 评论 -
系统调用接口---IO
*int open(const char pathname, int flags, mode_t mode);open(文件名,选项标志,权限)pathname:文件路径名flags:标志位必选其一:O_RDONLY ,O_WRONLY, O_RDWR可选项:O_CREAT:如果文件不存在,则创建O_EXCL:跟O_EXCL一起使用,如果文件已经存在报错返回。O_TRUNC:打开文件时截断文件长度为0—清空内容O_APPEND:将写入设置为追加写。w+:O_RDWR| O_CREAT|原创 2021-11-04 21:27:02 · 109 阅读 · 0 评论 -
linux:进程概念
进程概念:理解进程是什么?进程:运行中的程序时间片:cpu调度运行程序的时间段,时间片过后,就该切换调度下一个进程了并发:一种轮询处理的方式并行:同时运行通过程序的运行描述,操作系统就可以调度哪个程序可以占用cpu去运行指令要运行哪个程序,则操作系统找到对应程序的PCB,在pcb取出程序的运行所需信息,加载到cpu上,cpu就开始运行这个程序了对于操作系统而言,进程就是一个程序运行的描述,通过这个描述,操作系统可以进行程序的调度运行管理实际上对于操作系统而言,进程就是pcb这个程序运行原创 2021-11-03 16:19:06 · 157 阅读 · 0 评论 -
匿名管道----实例
ps -ef | grep pipeps -ef:将所有进程信息写入到标准输出grep pipe:不断循环从标准输入读取数据进行字符串匹配过滤shell进程中创建两个进程,一个进程运行ps,一个进程运行grep要将ps进程的数据,交给grep进程只能通过进程间通信完成—匿名管道流程:创建管道创建两个进程(不同进程,程序中体现为2个子进程,子进程通过父进程获得句柄),在各自进程中进行程序替换在程序替换之前,ps进程应该标准输出重定向到管道写入端,grep进程应该标准输入重定向到管道读取端父原创 2021-11-03 15:44:19 · 166 阅读 · 0 评论 -
模拟实现xshell(1)
流程1.捕捉用户键盘输入 [ ls -a -l]2.解析输入信息—得到命令名称,运行参数 [ls] [-a] [-l]3.创建子进程,在子进程通过命令名称进行程序替换(让子进程运行命令)4.进程等待,等待子进程退出,防止出现僵尸进程 #include<stdio.h> //printf原创 2021-11-02 22:16:06 · 370 阅读 · 0 评论 -
进程间通信--匿名管道
管道:ipc特性:半双工通信----可以选择方向的单向通信本质:系统内核中的一块缓存区(内核空间中开辟的一块内存)通信原理:多个进程只要能够访问同一块内核中的缓冲区(管道)就能实现通信。分类:匿名管道,命名管道匿名管道:只能用于具有亲缘关系的进程间通信命名管道:可以用于同一主机上任意进程间通信匿名管道:管道缓冲区没有标识符,无法被其他进程找到,因此只能通过子进程复制父进程的方式获取到管道的操作句柄,进行通信代码操作:int pipe(int pipefd[2]);pipefd[0]原创 2021-11-02 17:39:58 · 308 阅读 · 0 评论