fd

【网络编程小结(三)】利用多进程与多线程

∥☆過路亽.° 提交于 2020-01-12 23:35:49
在第一节的例子中,服务器是一个时间获取程序,只要一次write调用就能立刻完成客户端的任务,但是我们要想的是,服务端不一定每次都会这么快的完成任务,所以,要想办法加快服务端的处理速度。 首先可以想到的是并行处理,c++有两种方式,一个是多进程,一个是多线程。下面描述这两种办法。 一、压力测试 我们的客户端应当有能力判断服务端处理的快慢,所以我们要写一个压力测试函数: void request_to_server(int id,const char* ip,const uint16_t port){ int sockfd=socket(AF_INET,SOCK_STREAM,0); const char *id_str=std::to_string(id).c_str(); sockaddr_in addr; bzero(&addr,sizeof(addr)); addr.sin_family=AF_INET; addr.sin_port=htons(port); inet_pton(AF_INET,ip,&addr.sin_addr); connect(sockfd,(const sockaddr*)&addr,sizeof(addr)); const int buffersize=1024; char buf[buffersize]; write(sockfd,id_str

4.Gen_Event行为

拥有回忆 提交于 2020-01-12 15:18:56
本章应和 gen_event(3) 相结合阅读,它包含了所有接口函数和回调函数的详细说明。 事件处理原理 在OTP中, 事件管理器 (事件管理器)是一个命名对象,可以给其发送事件。一个 事件 (event)可以是诸如一个错误、一个警报或者是某种应被记录的信息。 在事件管理器中,可以安装零个、一个或者多个 事件处理器 (事件处理器)。当事件管理器被通知有一个事件时,所有安装了的事件处理器都会来处理该事件。例如,一个处理错误的事件管理器可以默认安装了一个将错误消息打印到终端的处理器。如果在某个特定期间,错误消息也要被保存到一个文件中,那么用户可以添加另外一个做这个事情的事件处理器。当不再需要记录到文件时,该事件处理器就会被删除。 一个事件管理器实现为一个进程,而每个事件处理器则实现为一个回调模块。 事件管理器本质上是在维护一个 {Module, State} 对的列表,其中每个 Module 是一个事件处理器, State 是事件处理器的内部状态。 例子 将错误消息输出到终端的事件处理器的回调模块可以这样写: -module(terminal_logger). -behaviour(gen_event). -export([init/1, handle_event/2, terminate/2]). init(_Args) -> {ok, []}. handle_event

IPC---共享内存的使用

丶灬走出姿态 提交于 2020-01-11 14:53:33
1 #include < stdio . h > 2 #include < stdlib . h > 3 #include < sys / mman . h > 4 #include < unistd . h > 5 #include < fcntl . h > 6 #include < string . h > 7 8 int main ( ) 9 { 10 int fd = open ( "mytest.txt" , O_RDWR | O_CREAT , 0644 ) ; 11 if ( fd == - 1 ) 12 { 13 perror ( "open error" ) ; 14 exit ( 1 ) ; 15 } 16 17 int len = ftruncate ( fd , 4 ) ; 18 if ( len == - 1 ) 19 { 20 perror ( "ftruncate error" ) ; 21 exit ( 1 ) ; 22 } 23 char * p = NULL ; 24 p = mmap ( NULL , 4 , PROT_READ | PROT_WRITE , MAP_SHARED , fd , 0 ) ; 25 if ( p == MAP_FAILED ) 26 { 27 perror ( "mmap error" ) ; 28 exit (

FileDescriptor

江枫思渺然 提交于 2020-01-11 13:56:42
FileDescriptor 在java中的java.io包下面   1 public final class FileDescriptor { 2 。。。 3 } 官方的解释:   文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄,该结构表示开放文件、开放套接字或者字节的另一个源或接收者。文件描述符的主要实际用途是创建一个包含该结构的 FileInputStream 或 FileOutputStream 。   一坨~~~看不明白~    在wiki中的描述   是一个用于表述指向 文件 的引用的抽象化概念。在形式上是一个非负整数。实际上,它是一个索引值,指向 内核 为每一个 进程 所维护的该进程打开文件的记录表。 当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。 在 程序设计 中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于 UNIX 、 Linux 这样的操作系统。    基于上面filedescriptor在java中,是当应用程序打开一个文件或者建立一个socket连接的时候,内核返回给应用程序一个非负的整数(In,out,err,分别为0,1,2),使用这个称之为filedescriptor的东西来实现对文件或者socket的操作。   【一网友的解释】【赞】

重定向

眉间皱痕 提交于 2020-01-11 09:04:53
标准输入和输出 程序:指令+数据 读入数据:Input 输出数据:Output 打开的文件都有一个fd: file descriptor (文件描述符) Linux给程序提供三种 I/O 设备 标准输入(STDIN) -0 默认接受来自终端窗口的输入 标准输出(STDOUT)-1 默认输出到终端窗口 标准错误(STDERR) -2 默认输出到终端窗口 [ root@centos8 ~ ] #ll /dev/std* lrwxrwxrwx. 1 root root 15 Dec 16 08:56 /dev/stderr - > /proc/self/fd/2 lrwxrwxrwx. 1 root root 15 Dec 16 08:56 /dev/stdin - > /proc/self/fd/0 lrwxrwxrwx. 1 root root 15 Dec 16 08:56 /dev/stdout - > /proc/self/fd/1 [ root@centos8 ~ ] #ll /proc/self/fd/* ls: cannot access '/proc/self/fd/255' : No such file or directory lrwx------. 1 root root 64 Dec 16 10:59 /proc/self/fd/0 - > /dev/pts/0

java io系列09之 FileDescriptor总结

大兔子大兔子 提交于 2020-01-11 07:40:58
本章对FileDescriptor进行介绍 转载请注明出处: http://www.cnblogs.com/skywang12345/p/io_09.html FileDescriptor 介绍 FileDescriptor 是“文件描述符”。 FileDescriptor 可以被用来表示开放文件、开放套接字等。 以 FileDescriptor表示文件来说:当FileDescriptor表示某文件时,我们可以通俗的将FileDescriptor看成是该文件。 但是,我们不能直接通过FileDescriptor对该文件进行操作;若需要通过FileDescriptor对该文件进行操作,则需要新创建 FileDescriptor对应的FileOutputStream,再对文件进行操作。 in, out, err介绍 (01) in -- 标准输入(键盘)的描述符 (02) out -- 标准输出(屏幕)的描述符 (03) err -- 标准错误输出(屏幕)的描述符 它们3个的原理和用法都类似,下面我们通过out来进行深入研究。 out 的作用和原理 out是标准输出(屏幕)的描述符。但是它有什么作用呢? 我们可以通俗理解,out就代表了标准输出(屏幕)。若我们要输出信息到屏幕上,即可通过out来进行操作;但是,out又没有提供输出信息到屏幕的接口

FileDescriptor介绍及使用

一笑奈何 提交于 2020-01-11 02:31:48
FileDescriptor 介绍 FileDescriptor 是“文件描述符”。 FileDescriptor 可以被用来表示开放文件、开放套接字等。 以FileDescriptor表示文件来说:当FileDescriptor表示某文件时,我们可以通俗的将FileDescriptor看成是该文件。但是,我们不能直接通过FileDescriptor对该文件进行操作;若需要通过FileDescriptor对该文件进行操作,则需要新创建FileDescriptor对应的FileOutputStream,再对文件进行操作。 in, out, err介绍 (01) in -- 标准输入(键盘)的描述符 (02) out -- 标准输出(屏幕)的描述符 (03) err -- 标准错误输出(屏幕)的描述符 它们3个的原理和用法都类似,下面我们通过out来进行深入研究。 out 的作用和原理 out是标准输出(屏幕)的描述符。但是它有什么作用呢? 我们可以通俗理解,out就代表了标准输出(屏幕)。若我们要输出信息到屏幕上,即可通过out来进行操作;但是,out又没有提供输出信息到屏幕的接口(因为out本质是FileDescriptor对象,而FileDescriptor没有输出接口)。怎么办呢? 很简单,我们创建out对应的“输出流对象”,然后通过“输出流”的write(

Linux /proc/pid目录下各文件含义

戏子无情 提交于 2020-01-11 00:12:56
/proc 是一个伪文件系统, 被用作内核数据结构的接口 , 而不仅仅是解释说明/dev/kmem. /proc 里的大多数文件都是只读的, 但也可以通过写一些文件来改变内核变量. ( Linux 内核提供了一种通过 /proc 文件系统, 在运行时访问内核内部数据结构、改变内核设置的机制 。 proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。 用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。 除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。 ) 下面对整个 /proc

socket采用epoll编程demo

北城以北 提交于 2020-01-10 23:01:04
epoll工作流程 首先,需要调用epoll_create创建epoll; 此后我们就可以进行socket/bind/listen; 然后调用epoll_ctl进行注册; 接下来,就可以通过一个while(1)循环调用epoll_wait来等待事件的发生; 然后循环查看接收到的事件并进行处理; 1)如果事件是sever的socketfd我们就要进行accept,并且把接收到client的socketfd加入到要监听的事件中; 2)如果在监听过程中,需要修改操作方式(读/写),可以调用epoll_ctl来重新修改; 3)如果监听到某一个客户端关闭,那么我就需要再次调用epoll_ctl把它从epoll监听事件中删除。 epoll的结构体 typedef union epoll_data { void *ptr; int fd; uint32_t u32; uint64_t u64; } epoll_data_t; struct epoll_event { uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */ }; #include <stdio.h> #include <string.h> #include <sys/socket.h> #include <sys/epoll.h

java io系列09之 FileDescriptor总结

白昼怎懂夜的黑 提交于 2020-01-10 15:54:43
本章对FileDescriptor进行介绍 转载请注明出处: http://www.cnblogs.com/skywang12345/p/io_09.html FileDescriptor 介绍 FileDescriptor 是“文件描述符”。 FileDescriptor 可以被用来表示开放文件、开放套接字等。 以FileDescriptor表示文件来说:当FileDescriptor表示某文件时,我们可以通俗的将FileDescriptor看成是该文件。但是,我们不能直接通过FileDescriptor对该文件进行操作;若需要通过FileDescriptor对该文件进行操作,则需要新创建FileDescriptor对应的FileOutputStream,再对文件进行操作。 in, out, err介绍 (01) in -- 标准输入(键盘)的描述符 (02) out -- 标准输出(屏幕)的描述符 (03) err -- 标准错误输出(屏幕)的描述符 它们3个的原理和用法都类似,下面我们通过out来进行深入研究。 out 的作用和原理 out是标准输出(屏幕)的描述符。但是它有什么作用呢? 我们可以通俗理解,out就代表了标准输出(屏幕)。若我们要输出信息到屏幕上,即可通过out来进行操作;但是,out又没有提供输出信息到屏幕的接口