01 2019 档案
摘要:epoll概念 epoll对文件描述符的操作方式有两种工作模式:LT模式(Level Trigger,水平触发) 和ET模式(Edge Trigger,边缘触发)。 LT模式:当epoll_wait检测到其上有事件发生并将此事件通知应用程序后,应用程序可以不立即处理该事件,这样,当应用程序下一次调用
阅读全文
摘要:poll函数 函数原型: struct ibv_context *ibv_open_device(struct ibv_device *device); 功能 打开指定的 InfiniBand 设备 返回设备上下文 (context),用于后续所有操作 这是使用 InfiniBand 设备的第一步
阅读全文
摘要:实验一 代码:链接【01项目】 1. 先启动服务器,如图: 2. 然后启动客户端,如图: 3. 输出结果: 【注意】:在服务器终止时,给父进程发送了一个SIGCHILD信号,这一点本例发生了,但是我们没有在代码中捕捉该信号,而默认该信号时被忽略,既然父进程未加处理,子进程于是进入僵尸状态。 如图:
阅读全文
摘要:文件IO #include<unistd.h> ssize_t read(int fd, void *buf, size_t count); read返回值: 1. = 0:数据读完(读到文件、管道、socket末尾-对端关闭) 2. -1: errno == EINTR:被信号中断 errno =
阅读全文
摘要:进程程序替换 进程程序替换原理 fork创建子进程执行的是和父进程相同的程序(也有可能是某个分支),通常fork出的子进程是为了完成父进程所分配的任务,所以子进程通常会调用一种exec函数(六种中的任何一种)来执行另一个任务。当进程调用exec函数时,当前用户空间的代码和数据会被新程序所替换,该进程
阅读全文
摘要:函数sigsuspend sigqueue函数原型: 函数作用:新的发送信号系统调用,主要是针对实时信号提出的支持信号带有参数,与函数sigaction()配合使用 int sigqueue(pid_t pid, int signo, const union sigval value); 分析: 第
阅读全文
摘要:函数函数sigaction 1. 函数sigaction原型: int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 分析: 参数 signum :要捕获的信号。 参数act:truct s
阅读全文
摘要:网络IPC:套接字 strcut sockaddr 很多网络编程函数诞生早于IPv4协议,那时候都使用的是sockaddr结构体,为了向前兼容,现在sockaddr退化成了(void *)的作用,传递一个地址给函数,至于这个函数是sockaddr_in还是sockaddr_in6,由地址族确定,然后
阅读全文
摘要:函数select 函数原型: int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); void FD_CLR(int fd, fd_set *set);
阅读全文
摘要:函数epoll 1. 函数epoll_creat: 该函数生成一个epoll专用的文件描述符: int epoll_creae(int size); 参数: size:epoll上能关注的最大描述符数 2. epoll_ctl:用于控制某个epoll文件描述符事件,可以注册、修改、删除: int e
阅读全文
摘要:使用lambda创建线程 1. 例子: #include <iostream> #include <thread> #include <chrono> #include <vector> #include <mutex> #include <memory> class Task { public:
阅读全文
摘要:函数wait 一个进程在终止时会关闭所有文件描述符,释放在用户空间释放的内存,但它的PCB还保留着,内核在其中保存一些信息:如果是正常终止时则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号是哪个,这个进程的父进程可以调用wait或waitpid获取这些信息,然后彻底清除这个进程,我们知道
阅读全文
摘要:会话 会话:是一个或多个进程组的集合。 创建一个会话需要注意以下6点注意事项: 调用进程不能是进程组组长,该进程变成新会话首进程(session header) 该进程成为一个新进程组的组长进程。 需要root权限(ubuntu不需要) 新会话丢弃原有的终端控制,该会话没有控制终端 该调用进程是组长
阅读全文
摘要:进程组 (1)进程组,也称之为作业,BSD与1980年前后向UNIX中增加的一个新特性,代表一个或多个进程的集合。每个进程都属于一个进程组,在waitpid函数和kill函数的参数中都曾经使用到,操作系统设计的进程组的概念,是为了简化对多个进程的管理。 当父进程创建子进程的时候,默认子进程与父进程属
阅读全文
摘要:signal函数 1. signal函数原型: #include <signal.h> void (*signal(int signo, void (*func)(int)))(int); 函数功能:为指定的信号安装一个新的信号处理函数。 图解; #include <stdio.h> #includ
阅读全文
摘要:信号集、sigprocmask、sigpending 信号源为目标进程产生了一个信号,然后由内核来决定是否要将该信号传递给目标进程。从信号产生到传递给目标进程的流程图如下图所示: 进程可以阻塞信号的传递。当信号源为目标进程产生了一个信号之后,内核会执行依次执行下面操作, 1. 如果目标进程设置了忽略
阅读全文
摘要:信号 一、信号集操作函数 内核通过读取未决信号集来判断信号是否应被处理。信号屏蔽字mask可以影响未决信号集。而我们可以在用程序自定义set来改变mask,来达到屏蔽指定信号目的。 sigset_t set; // typedef unsigned long sigset_t int sigempt
阅读全文
摘要:std::piecewise_construct 值得注意的是 map 类型的 emplace 处理比较特殊,因为和其他的容器不同,map 的 emplace 方法把它接收到的所有的参数都一起转发给 pair 的构造函数。但是对于一个 pair 来说,它既需要构造它的 key 又需要构造它的 val
阅读全文

浙公网安备 33010602011771号