fd

监控端主程序

天涯浪子 提交于 2019-12-05 08:42:16
#include <stdio.h> #include <unistd.h> #include <stdbool.h> #include <fcntl.h> #include <sys/epoll.h> #include <main.h> struct event_ext { int fd; bool epolled; uint32_t events; void (*handler)(int fd,void *arg); void *arg; }; struct event_ext *epoll_event_create(int fd,uint32_t type,void (*handler)(int,void *), void *arg) { struct event_ext *e = calloc(1,sizeof(struct event_ext)); e->fd = fd; e->events = type; e->handler = handler; e->arg = arg; return e; } int epoll_add_event(int epfd,struct event_ext *ev) { struct epoll_event epv; int op; //2. 初始化epoll_event(将附加结构挂载到epoll_event) epv.data

【Linux常见命令】lsof命令

浪尽此生 提交于 2019-12-05 06:56:11
lsof - list open files lsof命令用于查看你进程打开的文件,进程打开的端口(TCP、UDP),找回/恢复删除的文件,打开文件的进程。 语法:     lsof [选项] [文件] 常用选项: -c <进程名> 列出指定进程所打开的文件 +D <目录> 递归列出目录下被打开的文件 -i <条件> 列出符号条件的进程(4、6、协议、:端口、@ip) -n <目录> 列出使用NFS的文件 -p <进程号> 列出指定进程号所打开的文件 -u s 列出login name或UID为s的程序 实例 1. 在没有任何参数时,显示当前系统已经打开的正在使用的所有文件 [root@oldboy ~]# lsof|more -10 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,3 4096 2 / init 1 root rtd DIR 8,3 4096 2 / init 1 root txt REG 8,3 150352 139708 /sbin/init init 1 root mem REG 8,3 65928 132072 /lib64/libnss_fil es-2.12.so init 1 root mem REG 8,3 1926480 155325 /lib64

test

喜欢而已 提交于 2019-12-05 06:19:10
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<signal.h> #include<sys/types.h> #include<sys/wait.h> pid_t pid1, pid2; int fd[2]; void handler1(int sg) { if (sg == SIGINT) { kill(pid1, SIGUSR1); kill(pid2, SIGUSR1); } } void handler2(int sg) { close(fd[0]); close(fd[1]); if (pid1 == 0 && sg == SIGUSR1) { printf("Child Process 1 is killed by Parent!\n"); exit(0); } if (pid2 == 0 && sg == SIGUSR1) { printf("Child Process 2 is killed by Parent!\n"); exit(0); } } int main() { int myclock = 1; char buf[64]; char msg[64]; memset(buf, 0, 64); memset(msg, 0, 64); if

浮动静态路由和BFD联动实现路由自动更新

丶灬走出姿态 提交于 2019-12-05 00:50:39
1. 配置设备基本信息 IP地址、设备名称 2. 在R2上配置到10.9.9.0/24的静态路由 ip route-static 10.9.9.0 255.255.255.0 10.1.12.1 浮动路由(当链路R2到R1链路断开的时候,启动启用浮动路由) ip route-static 10.9.9.0 255.255.255.0 10.1.23.3 preference 80 R2 g0/0/0 接口DOWN掉R2会检测到,并启浮动路由;但是当R1 g0/0/1 或者 R1与S2之间的接口出现问题,R2是检测不到的,这样R2上的静态路由还是指向的10.1.12.1接口,而10.1.12.1 接口已经不可达;因为R2无法感知,所以备份路由也就无法浮现,从而出现数据流量中断的情况。 为了解决以上问题,诞生了BFD(双向转发检测)技术之一。他可快速检测网络的链路状况、IP可达性等。还可以与多种协议进行联动,如静态路由、OSPF、IS-IS、BGP、MPLS LSP等。 3. 我们可以在R1和R2上部署BFD来检测双方直连接口的IP连通性。 R1 配置如下: 激活BFD功能 [R1]bfd 创建一个BFD会话,会话名称为r1-r2(可自定义),对端IP地址为10.1.12.2 [R1]bfd r1-r2 bind peer-ip 10.1.12.2 [R1-bfd-session-r1

并发网络通信-io多路复用

佐手、 提交于 2019-12-04 23:42:24
""" io多路复用 select select tcp 服务 """ from socket import * from select import * s = socket()# 创建套接字,监听连接 s.setsockopt(SOL_SOCKET, SO_REUSEADDR, True) s.bind(('0.0.0.0', 9999)) s.listen(5) rlist = [s] while True: try: rs, ws, xs = select(rlist,[], []) except: continue for i in rs: if i == s: c, addr = i.accept() rlist.append(c) else: data = i.recv(1024).decode() if not data: rlist.remove(i) i.close() else: print(data) i.send(b'thanks') """ io多路复用的实现 poll() """ from select import * from socket import * s = socket()# 创建套接字 io s.setsockopt(SOL_SOCKET, SO_REUSEADDR, True) s.bind(('0.0.0.0', 8888)) s

linuxC进程间通信的几种方式

元气小坏坏 提交于 2019-12-04 22:03:08
1.管道,pipe()函数  实现最简单,实际为内核缓冲区的环形队列。  用于父子、兄弟等有血缘关系的进程间通信。   单向流动性,只能从管道读端读取,写端写入。  int fds[2];  pipe(fds);//传出参数,fd[0]为读端描述符,类似于stdin;fd[1]为写端描述符,类似于stdout   2.命名管道,fifo()函数  Linux基础文件类型。  可用于无血缘关系的进程间通信。  可多个读端,多个写端。  mkfifo("test", 0777);//创建一个命名管道  int fd1 = open("test", O_WRONLY);write(fd1, buf, strlen(buf));//一个进程写入  int fd2 = open("test", O_RDONLY)read(fd2, buf, sizeof(buf));//另一个进程读取 3.文件,open()函数  fork创建的子进程,共享文件描述符。  多个进程打开同一文件 4.共享存储映射,mmap()函数  借助文件创建映射内存。  进程间无血缘关系要求   void *mmap(void *addr, size_t len, int prot, int flags,int fd, off_t offset);    addr:映射区首地址,传NULL,内核自动分配    len

浮动静态路由和BFD联动

假装没事ソ 提交于 2019-12-04 21:58:56
浮动静态路由和BFD联动实现路由自动更新 路由器的工作是将数据包从源设备转发到目标设备。在它们之间可能有几个路由器。路由器使用称为路由表的数据库来转发这些数据包。静态路由(Static routing),一种路由的方式,手动配置路由项,而非动态决定。即使网络状况已经改变或是重新被组态,静态路由也不会改变。 BFD(Bidirectional Forwarding Detection,双向转发检测)是一个通用的、标准化的、介质无关和协议无关的快速故障检测机制,用于检测IP网络中链路的连通状况,保证设备之间能够快速检测到通信故障,以便能够及时采取措施,保证业务持续运行。 [AR1]bfd [AR1-bfd]quit [AR1]bfd tobeijing bind peer-ip 172.18.1.1 [AR1-bfd-session-tobeijing]discriminator local 10 [AR1-bfd-session-tobeijing]discriminator remote 20 [AR1-bfd-session-tobeijing]commit [AR1-bfd-session-tobeijing]quit [AR1]undo ip route-static 192.168.1.0 24 172.18.1.1 [AR1]ip route-static 192.168

python 文件IO

泪湿孤枕 提交于 2019-12-04 21:28:57
打开文件的两种方式 1.直接打开文件并赋值给变量,打开后得到操作句柄,但不会自动关闭 file = open('文件名‘,'打开模式',’编码‘) fd = open('../config/file1.txt','r',encoding='utf-8') 2.使用with子句,打开后文件会自动关闭,建议使用,并可以同时打开多个文件 with open('../config/file1.txt','r',encoding='utf-8') as fd1,\ open('../config/file2.txt','r',encoding='utf-8') as fd2: print("I had open two files") 打开文件的8种模式 ========= =============================================================== Character Meaning --------- --------------------------------------------------------------- 'r' open for reading (default) 'w' open for writing, truncating the file first 'x' create a new file and

带你手把手重读 Handler 源码,聊聊那些你所不知道一二三

谁都会走 提交于 2019-12-04 21:04:54
大家应该都知道,Android 的消息机制是基于 Handler 实现的。还记得一年前的自己就看了几篇博客,知道了 Handler、Looper、MessageQueue 就自以为了解了 Handler 的原理。但其实看源码的过程中慢慢就会发现,Handler 的内容可不止这点, 像同步屏障、 Handler 的 native 层的阻塞唤醒机制等等这些知识以前就没有理解清楚。因此写下这篇文章,从头开始重塑对 Handler 的印象。 觉得文章太长的可以找我拿了完整的PDF自行研究 参考: (更多完整项目下载。未完待续。源码。图文知识后续上传github。) 可以点击 关于我 联系我获取完整PDF ( VX:mm14525201314 ) Handler 采用的是一种生产者-消费者模型,Handler 就是生产者,通过它可以生产需要执行的任务。而 Looper 则是消费者,不断从 MessageQueue 中取出 Message 对这些消息进行消费,下面我们看一下其具体的实现。 发送消息 post & sendMessage 首先我们都知道,Handler 对外主要有两种方式来实现在其所在 Looper 所在线程执行指定 Runnable ——post 及 sendMessage ,它们都有对应的 delay 方法 。而不论是 post 还是 sendMessage ,都会调用到

2019-2020-1 20175310 20175317 20175320 实验三 实时系统

好久不见. 提交于 2019-12-04 20:39:27
2019-2020-1 20175310 20175317 20175320 实验三 实时系统 小组成员 20175310 奚晨妍 20175317 钟睿文 20175320 龚仕杰 实验步骤 一、并发程序-1 学习使用Linux命令wc(1) 基于Linux Socket程序设计实现wc(1)服务器(端口号是你学号的后6位)和客户端 客户端传一个文本文件给服务器 服务器返加文本文件中的单词数 上方提交代码 附件提交测试截图,至少要测试附件中的两个文件 client.c #include<netinet/in.h> // sockaddr_in #include<sys/types.h> // socket #include<sys/socket.h> // socket #include<stdio.h> // printf #include<stdlib.h> // exit #include<string.h> // bzero #define SERVER_PORT 175317 #define BUFFER_SIZE 1024 #define FILE_NAME_MAX_SIZE 512 int main() { // 声明并初始化一个客户端的socket地址结构 struct sockaddr_in client_addr; bzero(&client_addr,