IO多路复用-多线程并发通信
IO多路复用-多线程并发通信文档转自:IO多路复用之select/poll
IO多路转接也称为IO多路复用,它是一种网络通信的手段(机制),通过这种方式可以同时监测多个文件描述符并且这个过程是阻塞的,一旦检测到有文件描述符就绪( 可以读数据或者可以写数据)程序的阻塞就会被解除,之后就可以基于这些(一个或多个)就绪的文件描述符进行通信了。通过这种方式在单线程/进程的场景下也可以在服务器端实现并发。常见的IO多路转接方式有:select、poll、epoll
下面先对多线程/多进程并发和IO多路转接的并发处理流程进行对比(服务器端):
服务端用于监听的文件描述符只有一个,而用于通信的文件描述符有多个
多线程/多进程并发:
主线程/主进程:调用accept()检测客户端请求
accept函数检测用于监听的文件描述符的读缓冲区,若没有数据表示 没有新的客户端的连接请求,当前线程/进程会阻塞
有数据表示有新的客户端的连接请求解除阻塞,建立连接
子线程/子进程:和建立连接的客户端通信
调用 read() / recv( ...
UNIX环境编程-多进程(10)
UNIX环境编程-多进程(10)一、进程标识符pid在操作系统中,每个进程都有一个唯一的标识符,这个标识符就是进程ID,也被称为PID(Process ID)。进程ID是一个正整数,用于唯一标识一个正在运行的进程。操作系统内核使用这个标识符来跟踪各种进程状态信息
一些与进程ID相关的常见概念:
PID 0:在Unix/Linux系统中,PID为0的进程是调度进程,也被称为交换进程,它是系统的一部分,存在于内存中,但大部分时间处于休眠状态。
PID 1:在Unix/Linux系统中,PID为1的进程通常是init进程,是在系统启动后由内核自动启动的。所有的其他进程都是由这个进程直接或间接派生出来的(是所有进程的祖先(非父进程)进程)**。
Parent PID (PPID): 是创建新进程的父进程的PID。这是Unix/Linux系统中的一个重要概念,因为进程间的关系通常以父子继承的方式展现。
在编程中,有几个与PID相关的函数:
getpid(): 返回当前进程的PID。
getppid(): 返回父进程的PID。
fork(): 创建新的进程。 ...
UNIX环境编程-文件系统(9)
UNIX环境编程-文件系统(9)一、目录和文件1.获取文件属性(1)stat、fstat、lstat在 C 语言中,stat,fstat 和 lstat 函数用于获取文件的状态信息。这些信息包括文件大小,创建和修改时间,权限等。这些函数在 <sys/stat.h> 头文件中定义
123#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>
stat
函数获取指定路径的文件的状态信息
1int stat(const char *restrict pathname, struct stat *restrict statbuf);
fstat
函数获取一个已经打开的文件(由文件描述符指定)的状态信息
1int fstat(int fd, struct stat *statbuf);
lstat
函数类似于 stat,但当指定的路径是一个符号链接时,lstat 返回的是这个链接本身的信息,而 stat 返回的是链接指向的文件的信息:
1int lstat(const ...
UNIX环境编程-系统调用IO(8)
UNIX环境编程-系统调用IO(8)一、文件描述符视频教程
文件描述符的实质:一个整型数字,数组下标
在 Unix 和类 Unix 系统(如 Linux)中,文件描述符(file descriptor)是一个抽象的概念,用于表征一个打开的文件或者其他输入/输出资源,如管道或网络套接字。
文件描述符通常是一个非负整数。当一个进程打开一个现有文件或者创建一个新文件时,内核会创建一个文件描述符来表征这个文件。然后,进程可以使用这个文件描述符来读取文件、写入文件,或者进行其他操作。
例如,在 C 语言中,你可以使用 open 系统调用来打开一个文件,然后得到一个文件描述符。然后你可以使用 read、write 或其他系统调用来操作这个文件
通常情况下,每个 Unix 或类 Unix 进程都会有三个预定义的文件描述符:标准输入(0)、标准输出(1)、和标准错误输出(2) 文件描述符的数组中,前三个值是系统给定的(0,1,2)。这些文件描述符通常分别关联到键盘输入和终端的输出。
1write(1,"b",1) // 使用系统IO,向标准输出中写入 一个字符b ...
UNIX环境编程-标准IO (7)
UNIX环境编程-标准IO (7)IO:input & output 一切实现的基础
IO分类:
stdio(标准IO)–优先使用 对于不同的系统均可以使用
sysio系统调用IO(文件IO)
标准IO优点:
移植性性好、合并系统调用(可以为读写做一个加速的机制)
在不同的系统下,标准IO所依赖的系统调用的函数不同
一、fopen()1.fprintffprintf 是 C 语言标准库中的一个函数,用于将格式化的数据输出到文件。它是 printf 函数的文件版本,printf 输出到标准输出,而 fprintf 可以输出到任意文件
1234567891011#include <stdio.h>int fprintf( FILE *stream, const char *format, ... );// fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件// 如下:/* char name[20] = "Mary"; FIL ...