fd

Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager

自闭症网瘾萝莉.ら 提交于 2019-12-17 06:50:22
Redis缓存服务器是一款key/value数据库,读110000次/s,写81000次/s,因为是内存操作所以速度飞快,常见用法有存用户令牌、短信验证码等 官网显示 Redis本身并没有Windows版本的,微软官方开发了基于Windows的Redis服务器: MSOpenTech/redis 一、Redis服务端 首先下载Redis服务器, 点击前往 下载 .msi版本 ,双击安装Redis服务端就有了,并以服务的形式随系统一起启动: 安装好Redis服务器之后第一件事就是设置密码,进入安装目录:C:\Program Files\Redis - 找到配置文件:redis.windows-service.conf - 找到:# requirepass foobared - 回车换行加上:requirepass 这里写自己的新密码( 顶行写,前面不要留空格 ) - 到服务里重启Redis服务,或者重启电脑 不设置密码的坏处,看看携程这哥们的遭遇就知道了: 记一次Redis被攻击的事件 二、Redis客户端(命令行和可视化工具RDM) 命令行方式演示:启动Redis客户端、读写Redis服务器 上图命令解释: cd C:\Program Files\Redis :cd命令进入Redis安装目录,相当于Windows系统里双击进入Redis的安装目录 redis-cli.exe

基于epoll的聊天室程序

风格不统一 提交于 2019-12-17 03:11:37
epoll相对于poll和select这两个多路复用的I/O模型更加的高效。epoll的函数很简单,麻烦的地方在于水平触发和边沿触发。 用张图来说明下 ET(边沿)只是在状态反转时触发,比如从不可读到可读。而LT(水平)就是如果可读,就会一直触发。所以在使用ET的时候要做一些额外的处理,比如可读的,一直把缓冲区读完,进入不可读状态,下次来数据才会触发。 下面贴出代码,只是一个简单的练习的例子 socketheads.h C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #ifndef SOCKETHEADS_H #define SOCKETHEADS_H #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #include <fcntl.h> #include <netinet/in.h> #include <arpa/inet.h> #endif //SOCKETHEADS_H zepoll.h C++ 1 2 3 4 5 6 7 8 9 10 11 12

实验1-进程控制

扶醉桌前 提交于 2019-12-16 20:11:46
编写程序,演示多进程并发执行和进程软中断、管道通信。 (1) 父进程使用系统调用pipe( )建立一个管道,然后使用系统调用fork()创建两个子进程,子进程1和子进程2; (2) 子进程1每隔1秒通过管道向子进程2发送数据: I send you x times. (x初值为1,每次发送后做加一操作) (3) 子进程2从管道读出信息,并显示在屏幕上; (4) 父进程用系统调用signal()捕捉来自键盘的中断信号(即按Ctrl+C键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Process l is Killed by Parent! Child Process 2 is Killed by Parent! (5) 父进程等待两个子进程终止后,释放管道并输出如下的信息后终止 Parent Process is Killed! 源码下载 (1)思路:   按照实验内容,我们需要用父进程创建两个子进程,从而实现子进程之间通过管道(除此之外,还有mmap,fifo通信方式)来实现进程间通信。所以我们需要首先创建出两个子进程(这里注意fork函数使用的时候,避免子进程再创建出新的子子进程的问题,这样可能会导致整个程序退出的时候出现孤儿进程)。具体的进程通信步骤会在下面说明,还有就是Linux下信号的使用

Python3 OS 文件/目录方法

天大地大妈咪最大 提交于 2019-12-16 19:35:06
Python3 OS 文件/目录方法 os 模块提供了非常丰富的方法用来处理文件和目录。常用的方法如下表所示: 序号 方法及描述 1 os.access(path, mode) 检验权限模式 2 os.chdir(path) 改变当前工作目录 3 os.chflags(path, flags) 设置路径的标记为数字标记。 4 os.chmod(path, mode) 更改权限 5 os.chown(path, uid, gid) 更改文件所有者 6 os.chroot(path) 改变当前进程的根目录 7 os.close(fd) 关闭文件描述符 fd 8 os.closerange(fd_low, fd_high) 关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略 9 os.dup(fd) 复制文件描述符 fd 10 os.dup2(fd, fd2) 将一个文件描述符 fd 复制到另一个 fd2 11 os.fchdir(fd) 通过文件描述符改变当前工作目录 12 os.fchmod(fd, mode) 改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。 13 os.fchown(fd, uid, gid) 修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定

Swoole 是 PHP 中的 Node.js?

≯℡__Kan透↙ 提交于 2019-12-16 10:51:54
一想到那些可以使用 Node 的同事,一些 PHP 开发者的脸都嫉妒绿了。异步 Node 系统可以在不同协议间共享代码库,并在代码之外提供服务。这真的想让一个人转 Node 开发。实际上 PHP 中也有类似于 Node 的存在,并被列入了 PHP 拓展,叫做 Swoole。 PHP 中的 Node ?Swoole 到底是什么? 我先从 官方文档 中引用下 Swoole 的定义: Swoole:面向生产环境的 PHP 异步网络通信引擎。 使 PHP 开发人员可以编写高性能、可拓展的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务,而无需深入了解非阻塞 I/O 编程和初级 Linux 内核。 Swoole 使用 C 语言编写,作为 PHP 的 基本扩展 存在。听起来可还行,是吧?用 PHP 来运行 HTTP 服务?用 PHP 实现 Websockets ?还有其他的可能性,是不是很风骚?而且所有的这些都会保持极高的性能,我们来看看吧! 如何让它运行? 不同平台的安装方法有差异。 对于 Linux 来说,只需要运行一条 PECL 命令: pecl install swoole MacOS 用户可以使用 brew 命令: brew install swoole brew install homebrew/php/php72-swoole 译者注

共享内存

核能气质少年 提交于 2019-12-16 01:59:12
采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件。共享内存中的内容往往是在解除映射时才写回文件的。因此,采用共享内存的通信方式效率是非常高的。 Linux的2.2.x内核支持多种共享内存方式,如mmap()系统调用,Posix共享内存,以及系统V共享内存。linux发行版本如Redhat 8.0支持mmap()系统调用及系统V共享内存,但还没实现Posix共享内存,本文将主要介绍mmap()系统调用及系统V共享内存API的原理及应用。 一、内核怎样保证各个进程寻址到同一个共享内存区域的内存页面 1、page cache及swap cache中页面的区分:一个被访问文件的物理页面都驻留在page cache或swap cache中,一个页面的所有信息由struct page来描述。struct page中有一个域为指针mapping ,它指向一个struct address

[转]Linux虚拟网络设备之tun/tap

半城伤御伤魂 提交于 2019-12-15 00:24:03
转, 原文: https://segmentfault.com/a/1190000009249039 -------------------------------------------------------------------------------------------------------------- 在现在的云时代,到处都是虚拟机和容器,它们背后的网络管理都离不开虚拟网络设备,所以了解虚拟网络设备有利于我们更好的理解云时代的网络结构。从本篇开始,将介绍Linux下的虚拟网络设备。 虚拟设备和物理设备的区别 在 Linux网络数据包的接收过程 和 数据包的发送过程 这两篇文章中,介绍了数据包的收发流程,知道了Linux内核中有一个网络设备管理层,处于网络设备驱动和协议栈之间,负责衔接它们之间的数据交互。驱动不需要了解协议栈的细节,协议栈也不需要了解设备驱动的细节。 对于一个网络设备来说,就像一个管道(pipe)一样,有两端,从其中任意一端收到的数据将从另一端发送出去。 比如一个物理网卡eth0,它的两端分别是内核协议栈(通过内核网络设备管理模块间接的通信)和外面的物理网络,从物理网络收到的数据,会转发给内核协议栈,而应用程序从协议栈发过来的数据将会通过物理网络发送出去。 那么对于一个虚拟网络设备呢?首先它也归内核的网络设备管理子系统管理

Emlog显示评论者IP地理位置

可紊 提交于 2019-12-14 19:44:41
教程简介 为你的评论区加入 已评论者的IP地理位置显示 也不算什么有用的功能 想为你的博客加上这个小功能的 那就继续阅读哦 不想加的右上角X 不废话了 直接开始吧 第一步 你的模版/module.php增加如下代码 <? php //评论IP显示 function convertip ( $ip ) { $dat_path = EMLOG_ROOT . '/ip.dat' ; //*数据库路径*// if (! $fd = @fopen ( $dat_path , 'rb' )){ return 'IP数据库文件不存在或者禁止访问或者已经被删除!' ; } $ip = explode ( '.' , $ip ); $ipNum = $ip [ 0 ] * 16777216 + $ip [ 1 ] * 65536 + $ip [ 2 ] * 256 + $ip [ 3 ]; $DataBegin = fread ( $fd , 4 ); $DataEnd = fread ( $fd , 4 ); $ipbegin = implode ( '' , unpack ( 'L' , $DataBegin )); if ( $ipbegin < 0 ) $ipbegin += pow ( 2 , 32 ); $ipend = implode ( '' , unpack ( 'L' ,

epoll详解

无人久伴 提交于 2019-12-14 12:03:41
什么是 epoll ? epoll是 Linux 下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,因为它会复用文件描述符集 合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符 集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的电平触发 (Level Triggered)外,还提供了边沿触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。 Linux 2.6内核中对/dev/epoll设备的访问的封装(system epoll)。 这个使我们开发网络应用程序更加简单,并且更加高效。 为什么要使用epoll? 同样,我们在linux系统下,影响效率的依然是I/O操作,linux提供给我们select/poll/epoll等多路复用I/O方式 (kqueue暂时没研究过) ,为什么我们对epoll情有独钟呢?原因如下: 1.文件描述符数量的对比。 epoll并没有fd(文件描述符)的上限,它只跟系统内存有关

node + promise 实现文件读写

只谈情不闲聊 提交于 2019-12-14 11:11:21
const fs = require('fs'); const promise = new Promise((resolve, reject) => { fs.open('./c.txt', 'w', (err, fd) => { if (!err) { resolve(fd); }else { reject(err); } }) }); promise.then((fd) => { return new Promise((resolve, reject) => { fs.write(fd, 'wswsws', (err, result) => { if(err){ console.log(err); } resolved(fd); }) }) }).then((fd) => { return new Promise((resolve, reject) => { fs.close(fd,(err) => { if (!err) { resolve(); }else { reject(err); } }) }) }).then(() => { console.log('success') }).catch((err) => { console.log(err); }) 来源: https://www.cnblogs.com/wangsai-666/p/12038238.html