fd

C语言使用多进程实现高并发tcp服务器

青春壹個敷衍的年華 提交于 2020-01-06 08:01:39
多进程并发服务器的流程 socket; 创建监听套接字 bind; 绑定地址结构 listen(); 设置监听上限 accept();进行循环监听 fork();接收到客户端请求创建新的进程 close(); 与客户端通讯的套接字关闭 实现C语言并发服务器 #include <stdio.h> #include <apra/inet.h> #include <errno.h> #include <sys/socket.h> #include <unistd.h> #include <signal.h> void perr_exit(const char *s){ perror(s); exit(-1); } int Accept(int fd, struct sockaddr *sa, socklen_t *salenptr) { int n; again: if((n = accept(fd,sa,salenptr))<0){ if((errno == ECONNABORTED) || errno == EINTR) goto again; else perr_exit("accept error"); } return n; } int Bind(int fd, struct sockaddr *sa, socklen_t salen) { int n; if ((n =

Linux下进程中的通信(上)

给你一囗甜甜゛ 提交于 2020-01-04 19:23:31
一.进程通信的概念 为什么要进程通信? 进程通信:顾名思义,应该是两个进程间进行通信。 进程之间具有独立性,每个进程都有自己的虚拟地址空间,进程A不知道进程B的虚拟地址空间的数据内容(类似于一个人不知道另一个人脑子里在想啥) 二.进程间通信方式的分类 进程间通信方式的共同点: 进程间需要“介质”—两个进程都能访问到的公共资源。 常见的通信方式: 文件(最简单的方法) 假如用vim打开一个test.c文件,这时候会自动产生一个以文件名结尾的.swap文件,用于保存数据。 当正常关闭时,此文件会被删除。当文件非正常关闭时(比如编辑代码时突然断网),如果此时再次通过vim打开该文件,就会提示存在.swap文件,此时你可以通过它来恢复文件:vim -r filename.c 恢复以后把.swap文件删掉,就不会再出现一堆提示了。所以该文件存在就是为了进行进程中的通信。 管道 1.管道定义:一个进程连接到另一个进程的数据流。 ps aux | grep test ,将前一个进程(ps)的输出作为后一个进程(grep)的输入两进程间通过管道进行通信。 ps aux | -l :wc指word count,-l指行数,将ps aux进程的标准输出作为wc -l的标准输入。 2.管道分类 匿名管道和命名管道。 匿名管道 管道是在内核中的一块内存(构成了一个队列)

同步、异步、互斥、信号量、阻塞、非阻塞

微笑、不失礼 提交于 2020-01-04 04:55:37
(1)临界资源   在操作系统中, 进程是占有资源的最小单位 (线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源)。但对于某些资源来说,其在同一时间只能被一个进程所占用。这些一次只能被一个进程所占用的资源就是所谓的临界资源。 (2)同步、互斥   相交进程之间的关系主要有两种: 同步 与互斥(一定要记住:不是同步和异步)。所谓互斥,是指散布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它 们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。所谓同步,是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的 某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。   显然,同步是一种更为复杂的互斥,而互斥是一种特殊的同步。   也就是说互斥是两个线程之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)!   互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。   同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥

Python 海龟绘图 100 题——第 32 题

时光总嘲笑我的痴心妄想 提交于 2020-01-03 09:53:06
题目:绘制下面的图形 解析: 循环绘制长方形里面一个小正方形 答案: import turtle as t for i in range ( 0 , 2 ) : t . fd ( 140 ) t . lt ( 90 ) t . fd ( 80 ) t . lt ( 90 ) t . pu ( ) t . fd ( 50 ) t . lt ( 90 ) t . fd ( 20 ) t . pd ( ) for i in range ( 0 , 4 ) : t . fd ( 40 ) t . rt ( 90 ) 来源: 玩转Python海龟绘图 来源: CSDN 作者: judi0713 链接: https://blog.csdn.net/u014297578/article/details/103804539

PWN fd [pwnable.kr]CTF writeup题解系列1

我的未来我决定 提交于 2020-01-01 16:52:54
题目地址: http://pwnable.kr/play.php 题目地址页面,看看还是挺有意思的,还有一些图片。 看看题目: 题目比较简单,直接把解题过程列出来 root@mypwn:/ctf/work/reverse# ssh fd@pwnable.kr -p2222 The authenticity of host '[pwnable.kr]:2222 ([128.61.240.205]:2222)' can't be established. ECDSA key fingerprint is SHA256:I9nWMZvctQv4Vypnh9ICs6aB2g20WV/EjTIYJ83P0K8. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[pwnable.kr]:2222,[128.61.240.205]:2222' (ECDSA) to the list of known hosts. fd@pwnable.kr's password: Permission denied, please try again. fd@pwnable.kr's password: ____ __ __ ____ ____ ____ _ ___ __ _ ____

UNIX 系统

青春壹個敷衍的年華 提交于 2020-01-01 14:26:06
1 UNIX操作系统 UNIX系统是一个交互式的分时操作系统 1974年《ACM通信》上发表了K. Thompson 和 D. Ritchie的论文“The UNIX Time-Sharing System”,UNIX系统公布于世。 作者:美国BELL实验室 Ken Thompson(K.汤普逊)Dennis Ritchie (D.里奇)(C语言的创始人) 1.1 UNIX操作系统的发展 1965年:麻省理工大学、BELL实验室、通用电器公司组成MAC课题组联合研制Multics操作系统。 Multics操作系统设计目标是要向大的用户团体提供对计算机的同时访问,支持强大的计算能力与数据存储,以及允许用户带需要的时候容易共享他们的数据。 1969年Multics在GE645计算机上运行了,但它既没有能提供预定的综合计算服务,而且连它自己究竟什么时候算达到开发的目标。 BELL实验室退出了该课题组。 Multics操作系统开发失败的原因是当时操作系统设计的指导思想所导致的。 当时操作系统设计的指导思想是“满足所有用户的所有要求”。 UNIX系统的作者认为:操作系统的设计不应也不可能做到“满足所有用户的所有要求”,而应为广大的计算机用户提供一种良好的程序设计环境。 1969年K. Thompson和 D. Ritchie 为了改善他们的程序设计环境,设计了一个纸面的文件系统设计

并发编程(IO多路复用)

被刻印的时光 ゝ 提交于 2019-12-31 23:29:37
转: https://www.cnblogs.com/cainingning/p/9556642.html 阅读目录 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 异步IO(Asynchronous I/O) 六 IO模型比较分析 七 selectors模块 IO模型介绍   为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。所以,为了更好的回答这个问题,我先限定一下本文的上下文。 本文讨论的背景是Linux环境下的network IO。本文最重要的参考文献是Richard Stevens的“UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking ”,6

elect、poll、epoll优缺点

僤鯓⒐⒋嵵緔 提交于 2019-12-31 11:04:51
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作 。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的 ,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。 select的几大缺点: (1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大 (2)同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大 (3)select支持的文件描述符数量太小了,默认是1024 2 poll实现   poll的实现和select非常相似,只是描述fd集合的方式不同,poll使用pollfd结构而不是select的fd_set结构,其他的都差不多。 select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。但是解决了select的文件描述符的最大上线数 3、epoll   epoll既然是对select和poll的改进,就应该能避免上述的三个缺点。那epoll都是怎么解决的呢?在此之前

健壮的I/O(RIO)

对着背影说爱祢 提交于 2019-12-30 13:35:00
在上篇 Unix系统级I/O 中,我们介绍了有关在Unix环境下读取和写入文件的函数 read 和 write ,也提到了标准I/O在进行网络I/O时的局限性。但是在某些地方,直接使用 read 和 write 往往会出现不足值,比如在复杂的网络环境中读取socket。如果想让我们的程序更加的可靠,就需要反复的调用 read 和 write 去处理,知道传送完所需要的字节。在csapp一书中,给我们提供了一个健壮可靠的I/O包来自动处理这种不足值的情况,称为RIO(Robust I/O)。本文主要整理RIO提供的函数备忘。 详细代码及用法示例可以在 这里 找到。 无缓冲区的rio rio_readn 、 rio_writen 和 read 、 write 用法基本一致,只是 rio_readn 会不断尝试读出,直到读取出n个字节或遇到EOF或出错; rio_writen 函数绝不会返回一个不足值,它会不断尝试写入直到写入全部字节或者出错。由于没有缓冲区的存在, rio_readn 和 rio_writen 可以任意交替使用。 #include "rio.h" ssize_t rio_readn(int fd, void *buf, size_t n); /* 返回:若成功则为传送的字节数,若为EOF则为0,若出错则为-1 */ ssize_t rio_writen(int fd,

CAN FD协议简介

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-30 09:47:38
在汽车领域,随着人们对数据传输带宽要求的增加,传统的CAN总线由于带宽的限制难以满足这种增加的需求。此外为了缩小CAN网络(max. 1MBit/s)与FlexRay(max.10MBit/s)网络的带宽差距,BOSCH公司2011年推出了CAN FD方案 。 CAN FD(CAN with Flexible Data rate)继承了CAN总线的主要特性。CAN总线采用双线串行通讯协议,基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制使CAN总线有很高的安全性,但CAN总线带宽和数据场长度却受到制约。CAN FD总线弥补了CAN总线带宽和数据场长度的制约,CAN FD总线与CAN总线的区别主要在以下两个方面: 可变速率 CAN FD采用了两种位速率:从控制场中的BRS位到ACK场之前(含CRC分界符)为可变速率,其余部分为原CAN总线用的速率,即仲裁段和数据控制段使用标准的通信波特率,而数据传输段时就会切换到更高的通信波特率,数据传输速率可大于。两种速率各有一套位时间定义寄存器,它们除了采用不同的位时间单位TQ外,位时间各段的分配比例也可不同。 新的数据场长度 CAN FD对数据场的长度作了很大的扩充,DLC最大支持64个字节,在DLC小于等于8时与原CAN总线是一样的,大于8时有一个非线性的增长,所以最大的数据场长度可达64字节。 CAN FD 介绍 1. CAN