fd

以C语言为例完成一个hello/hi的简单的网络聊天程序

自闭症网瘾萝莉.ら 提交于 2019-12-06 15:11:08
本实验是在ubuntu系统下实现一个简单的客户端和服务端通信的简单demo,以TCP协议为例。 首先介绍API: server用到的API有socket,bind,listen,accept,read,write,close (read和write可以用send和recv替换) client用到的API有socket,connect,read,write,close (read和write可以用send和recv替换) 下面来看一下各个API的声明和描述,用man查看各个api声明: 因为linux系统把一切都当做文件来看待,所以像操作文件一样来操作socket文件描述符,写入数据就是发送数据,读数据就是接收数据,这种做法 符合linux系统的一切都当做文件来看待的设计理念。当然也可以用send和recv函数,read和write底层调用的跟send和recv的实现是一样的。 上面就是各种API的介绍,总结来说; socket函数主要是来定义是使用流数据还是数据报数据,对应的就是TCP和UDP协议,TCP的负载对传输层来说是没有数据结构的概念的, 对于上层调用write函数,只是将数据放到发送缓冲区,每次write就只是把数据放到发送缓冲区的最后,就是排队放在后面,完全没有结构的概念, 没有一次write是属于一个报文,而UDP就是一次发送就是一个报文

(二十九)python3 之os模块

两盒软妹~` 提交于 2019-12-06 14:17:11
在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路径进行操作,这就依赖于os模块,所以今天整理下比较常用的几个方法。网上这方面资料也很多,每次整理,只是对自己所学的知识进行梳理,从而加深对某个模块的使用。 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename(

我对网络IO的理解

回眸只為那壹抹淺笑 提交于 2019-12-06 13:47:17
Unix/Linux系统下IO主要分为磁盘IO,网络IO,我今天主要说一下对网络IO的理解,网络IO主要是socket套接字的读(read)、写(write),socket在Linux系统被抽象为流(stream)。 网络IO模型 在Unix/Linux系统下,IO分为两个不同阶段: 等待数据准备好 从内核向进程复制数据 阻塞式I/O 阻塞式I/O(blocking I/O)是最简单的一种,默认情况下,socket 套接字的系统调用都是阻塞的,我以recv/recvfrom 理解一下网络IO的模型。当应用层的系统调用recv/recvfrom时,开启Linux的系统调用,开始准备数据,然后将数据从内核态复制到用户态,然后通知应用程序获取数据,整个过程都是阻塞的。两个阶段都会被阻塞。 阻塞I/O模型 图片来源于《Unix网络编程卷1》 阻塞I/O下开发的后台服务,一般都是通过多进程或者线程取出来请求,但是开辟进程或者线程是非常消耗系统资源的,当大量请求时,因为需要开辟更多的进程或者线程有可能将系统资源耗尽,因此这种模式不适合高并发的系统。 非阻塞式I/O 非阻塞IO(non-blocking I/O)在调用后,内核马上返回给进程,如果数据没有准备好,就返回一个error ,进程可以先去干其他事情,一会再次调用,直到数据准备好为止,循环往返的系统调用的过程称为轮询(pool)

Linux 下利用 Lsof 恢复误删文件

别等时光非礼了梦想. 提交于 2019-12-06 13:44:25
原理:在Linux系统的/proc 分区下保存着进程的目录和名字,包含fd(文件描述符)和其下的子目录(进程打开文件的链接),那么如果删除了一个文件,还存在一个 inode的引用:/proc/进程号/fd/文件描述符。我们只要知道当前打开文件的进程pid和文件描述符fd就能利用lsof工具列出进程打开的文件。 一、将 ls 的手册过滤掉主要控制符后重定向到文件ls.txt 中,并用more查看,CTRL + Z 暂停查看操作 1: [root@localhost script]# man ls |col -b > ls.txt 2: [root@localhost script]# more ls.txt 3: LS(1) User Commands LS(1) 4: 1: [1]+ Stopped more ls.txt 2: [root@localhost script]# 3: [root@localhost script]# jobs 4: [1]+ Stopped more ls.txt 5: 二、假设误删文件 ls.txt 1: [root@localhost script]# rm ls.txt 2: rm:是否删除 一般文件 “ls.txt”? y 三、利用lsof找到进程6511、并拷贝恢复,只能在这个文件被使用或调用的情况下有效 3: [root

让Libevent 在window下 支持 IOCP

一笑奈何 提交于 2019-12-06 12:54:14
Libevent 的强大就不说了,但由于在window下使用的是 select 机制 ,除了效率低下意外还有一个讨厌的"FD_SETSIZE"限制,所以一直 希望能支持IOCP,可是现在已经到2.0还是没能够支持。 无意中在网上发现了个支持IOCP的libevent版本,是1.4.7版的。不过没关系,把其中的一个关键文件"win32iocp.c"拷贝到最新的1.4.14b版本中,并在"event.c" 中修改: ..... #ifdef HAVE_POLL extern const struct eventop pollops; #endif #ifdef HAVE_EPOLL extern const struct eventop epollops; #endif #ifdef HAVE_WORKING_KQUEUE extern const struct eventop kqops; #endif #ifdef HAVE_DEVPOLL extern const struct eventop devpollops; #endif #ifdef WIN32 #ifndef _EVENT_NOIOCP extern const struct eventop win32iocpops; #endif extern const struct eventop win32ops;

vxworks常用API总结

混江龙づ霸主 提交于 2019-12-06 12:38:20
这两天在看VxWorks下的socket网络方面的编程,其中涉及到不少VxWorks下的函数使用,在网上搜了半天觉得这个很不错,于是将其copy下来。最后给出了copy的链接。 vxWorks编程指南 一、官方的Program Guide 位于安装目录下:\docs\vxworks\guide\index.html 二、常用的库: #i nclude "taskLib.h" /* 任务 */ #i nclude "msgQLib.h" /* 消息队列 */ #i nclude "semLib.h" /* 信号量 */ #i nclude "ioLib.h" /* IO */ #i nclude "wdLib.h" /* Watch dog */ #i nclude "logLib.h" /* 信息输出 */ #i nclude "socket.h" /* 网络套接字 */ 三、IO系统:ioLib.h 1、系统中的IO设备,包括键盘、串口、文件等,都用统一的接口访问。第一步通常先得到文件描述符,然后进行读写或者设置的工作,最后关闭该描述符。 creat:建立文件 open:得到文件或设备的描述符 read:读文件或设备 write:写文件或设备 ioctl:设置参数 close:关闭文件描述符 remove:删除文件 2、内存文件 memDrv( ) - 初始化伪内存设备

UNIX编程 TCP基础读写笔记

让人想犯罪 __ 提交于 2019-12-06 12:20:34
基本TCP客户端与服务器 Server #include <cstdio> #include <cstring> #include <string> #include <vector> #include <unistd.h> #include <arpa/inet.h> #include <sys/errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <string> using namespace std; const int BUF_SIZE = 1024; string addr_to_string(const sockaddr_in *addr) { char addr_str[INET_ADDRSTRLEN]; const char *addr_str_ptr = inet_ntop(AF_INET, &addr->sin_addr, addr_str, sizeof(addr_str)); if (addr_str_ptr == NULL) { fprintf(stderr, "inet_ntop failed\n"); return ""; } return string(addr_str_ptr) + ":" + to_string(ntohs(addr->sin_port)); }

2019年12月2日Linux开发手记

試著忘記壹切 提交于 2019-12-06 08:51:00
开始学习在Linux下视频源捕获驱动框架,也就是V4L2(video4linux),本次关于v4l2的知识准备主要在于其的官方例程,理解官方例程也就差不多掌握了v4l2的基本内容。例程在: http://blog.chinaunix.net/uid-23983143-id-3351976.html 知识准备: v42视频编程的流程和对文件操作并没有什么本质的不同,大概的流程如下 1.打开视频设备(通常是/dev/video0) 2.获得设备信息。 3.根据需要更改设备的相关设置。 4.获得采集到的图像数据(在这里v4l提供了两种方式,直接通过打开的设备读取数据,使用mmap内存映射的方式获取数据)。 5.对采集到的数据进行操作(如显示到屏幕,图像处理,存储成图片文件)。 6.关闭视频设备。 知道了流程之后,我们就需要根据流程完成相应的函数。 第一步: 那么我们首先完成第1步打开视频设备,需要完成int v4l_open(char *, v4l_device *); 具体的函数如下 #define DEFAULT_DEVICE “/dev/video0” int v4l_open(char *dev , v4l_device *vd) { if(!dev)dev= DEFAULT_DEVICE; if((vd-fd=open(dev,O_RDWR))<0){perror(“v4l

php websoket 通讯

百般思念 提交于 2019-12-06 08:08:09
server <?php /** * websorket 即时通讯服务器 */ class Websocket { private $_serv; private $_pdo; public function __construct($host='0.0.0.0',$port=9501) { $this->_serv=new swoole_websocket_server($host, $port, SWOOLE_BASE); $this->_pdo=new PDO("mysql:host=*********;dbname=leocms", "*****","*****"); //初始化一个PDO对象$this->_serv->set( ['websocket_compression' => true,] ); $this->_serv->on('handshake',[$this,'on_handshake']); $this->_serv->on('open',[$this,'on_open']); $this->_serv->on('message',[$this,'on_message']); $this->_serv->on('close',[$this,'on_close']); } /** * 退出登录 */ public function on_close

操作系统实验指导书

二次信任 提交于 2019-12-06 07:57:43
《操作系统》实验教学大纲 一、基本信息 课程编码 350424005 课程学时 48 课程类别 学科基础课程 实验总学时 8 开出学期 5 开出单位 计算机系 适用专业 软件工程 网络工程 二、实验安排 序号 实 验 项 目 实验学时 每组人数 实验类型 开出要求 1 实验一 进程管理 2 1 验证 必做 2 实验二 进程通信 6 1 设计 必做 三、实验目的、内容与要求 实验一 进程管理 (一)实验目的 1.加深对进程概念的理解,明确进程和程序的区别。 2.进一步认识并发执行的实质。 3.分析进程竞争资源的现象,学习解决进程互斥与同步的方法。 (二)实验内容 1.Linux系统中进程的创建。 2.Linux系统中进程的控制。 (三)实验要求 1.掌握Linux系统中进程的创建、控制的实现方法。 2.根据实验内容,在Linux平台上用C语言编程实现,上机调试运行得出实验结果。 3.写出预习报告和实验报告。 实验二 进程通信 (一)实验目的 1.理解和掌握Linux系统中进程通信的基本原理。 2.进一步认识进程软中断通信、管道通信和消息队列通信的实质。 3.分析、设计进程软中断通信、管道通信和消息队列通信的实现方法。 4.掌握进程通信的实现机制。 (二)实验内容 1.设计进程的软中断通信。 2.设计进程的管道通信,实现父子进程的单机通信机制。 3. 设计进程的消息队列通信,实现客户机