fd

android6.0系统Healthd深入分析

女生的网名这么多〃 提交于 2019-12-05 17:36:08
概述 Healthd是android4.4之后提出来的一种中介模型,该模型向下监听来自底层的电池事件,向上传递电池数据信息给Framework层的BatteryService用以计算电池电量相关状态信息,BatteryServcie通过传递来的数据来计算电池电量显示,剩余电量,电量级别等信息,如果收到过温报警或者严重低电报警等信息,系统会直接关机,保护硬件。 主模块处理流程 Healthd模块代码是在system/core/healthd/,其模块入口在healthd的main函数,函数代码如下: int main(int argc, char **argv) { int ch; int ret; klog_set_level(KLOG_LEVEL); healthd_mode_ops = &android_ops; if (!strcmp(basename(argv[0]), "charger")) { healthd_mode_ops = &charger_ops; } else { while ((ch = getopt(argc, argv, "cr")) != -1) { switch (ch) { case 'c': healthd_mode_ops = &charger_ops; break; case 'r': healthd_mode_ops =

LaravelS - 基于Swoole加速Laravel/Lumen

社会主义新天地 提交于 2019-12-05 17:23:50
LaravelS LaravelS 是一个胶水项目,用于快速集成 Swoole 到 Laravel 或 Lumen ,然后赋予它们更好的性能、更多可能性。 Github 特性 内置Http/ WebSocket 服务器 多端口混合协议 协程 自定义进程 常驻内存 异步的事件监听 异步的任务队列 毫秒级定时任务 平滑Reload 修改代码后自动Reload 同时支持Laravel与Lumen,兼容主流版本 简单,开箱即用 要求 依赖 说明 PHP >= 5.5.9 推荐PHP7+ Swoole >= 1.7.19 从2.0.12开始不再支持PHP5 推荐4.2.3+ Laravel / Lumen >= 5.1 推荐5.6+ 安装 1.通过 Composer 安装( packagist )。有可能找不到 3.0 版本,解决方案移步 #81 。 composer require "hhxsv5/laravel-s:~3.5.0" -vvv # 确保你的composer.lock文件是在版本控制中 2.注册Service Provider(以下两步二选一)。 Laravel : 修改文件 config/app.php , Laravel 5.5+支持包自动发现,你应该跳过这步 'providers' => [ //... Hhxsv5\LaravelS\Illuminate

Epoll的使用例子

北城以北 提交于 2019-12-05 16:39:46
本篇文章在上一篇的基础上,使用 epoll 实现了一个事件监听和回调处理的模块。如何编写一个使用该模块的例子呢? 监测什么类型的fd,监测什么类型的事件,监测到事件以后需要做什么?后来可以看看如何将该模块与socket , 回调函数, 线程池联系起来。 #include<sys/epoll.h> // epoll_create, epoll_ctl, epoll_wait #include <mutex> // std::mutex #include <functional> // std::function #include <iostream> #include <memory> // std::unique_ptr #include <unistd.h> // close class Epoll{ public: class ActiveEvents { public: ActiveEvents( int num, const struct epoll_event* events): num_( num ), events_( events ) { } int num() const { return num_; } const struct epoll_event* events() const { return events_; } private: int num_;

epoll 基本知识与使用

孤者浪人 提交于 2019-12-05 16:30:39
https://blog.csdn.net/qq_35721743/article/details/86742508 epoll 最大的好处在于它不会随着监听 fd 数目的增长而降低效率。 epoll 的接口,一共有三个函数, 都在头文件 #include <sys/epoll.h> 里。 1. 创建 epoll 句柄 int epfd = epoll_create(intsize); 创建一个 epoll 句柄,size 用来告诉内核这个监听的数目一共有多大。当创建好epoll句柄后,它就是会占用一个fd值,在linux下如果查看 /proc/进程id/fd/, 是能够看到这个fd的,所以在使用完epoll后,必须调用 close() 关闭。 否则可能导致 fd 被耗尽。 函数声明: int epoll_create(int size) 该函数生成一个epoll专用的文件描述符。它其实是在内核申请一空间,用来存放你想关注的socket fd 上是否发生以及发生了什么事件。size就是你在这个epoll fd上能关注的最大socket fd 数, 由用户确定, 只要内存空间够用。 2. 将被监听的描述符添加到epoll句柄或从epoll句柄中删除或者对监听事件进行修改 函数声明:int epoll_ctl( int epfd, int op, int fd, struct

node.js中fs.createWriteStream详解

非 Y 不嫁゛ 提交于 2019-12-05 15:47:30
代码:   fs.createWriteStream(path,[options]); path <String> | <Buffer> options <String> | <Object> flags <String> defaultEncoding <String> fd <Integer> mode <Integer> autoClose <Boolean> start <Integer> 返回一个新建的 WriteStream 对象(详见可写流)。 options 是一个带有以下默认值的对象或字符串: { flags: 'w', defaultEncoding: 'utf8', fd: null, mode: 0o666, autoClose: true } 来源: CSDN 作者: h5css3_linhuai 链接: https://blog.csdn.net/h5css3_linhuai/article/details/56480056

nodejs学习笔记

感情迁移 提交于 2019-12-05 15:22:12
一、fs模块 文件系统模块 1.Node.js 文件系统 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs) 2.引入文件模块 var fs = require("fs"); 3.异步读取txt文本使用 fs.readFile('文本url',function(err,date){ if(err){ console.log(err.stack); }else{ console.log(date.toString()); } }); 4.同步读取 var data = fs.readFileSync('input.txt'); console.log("同步读取: " + data.toString()); 5.异步同步同时存在遵循同步有先 6.fs.open(path,flags,mode,callback);在异步模式下打开文件 path--文件路径 flags--以何种方式打开r r+ rs rs+ w w+ wx wx+ a ax a+ ax+ 7.fs.stat(path, callback)通过异步模式获取文件信息 fs.stat('hello.js', function (err, stats) { console.log(stats.isFile()); //true }) 8.stats 是 fs.Stats 对象

C语言实现FTP服务器

微笑、不失礼 提交于 2019-12-05 15:20:26
公共部分代码 /* common.h */ #ifndef COMMON_H #define COMMON_H #include <arpa/inet.h> #include <ctype.h> #include <dirent.h> #include <errno.h> #include <fcntl.h> #include <netdb.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/wait.h> #include <sys/socket.h> #include <sys/types.h> #include <unistd.h> #define DEBUG 1 #define MAXSIZE 512 #define CLIENT_PORT_ID 30020 struct command { char arg[255]; char code[5]; }; int socket_create(int port); int socket_accept(int sock_listen); int socket_connect(int port, char *host); int recv_data(int sockfd, char*

计算机中的“句柄”到底是啥意思呢

三世轮回 提交于 2019-12-05 14:08:23
https://www.cnblogs.com/Nick-Hu/p/7154197.html 里提到: 所谓句柄,实际上是一个数据,是一个 long (长整型)的数据。句柄是windows用来标识被应用程序所建立或使用的对象的唯一整数。 但是人家想了解的是,linux 中的句柄又是啥意思呢? https://www.orchome.com/518 1. 句柄就是一个标识符,只要获得对象的句柄,我们就可以对对象进行任意的操作。 2. 句柄不是指针,操作系统用句柄可以找到一块内存,这个句柄可能是标识符,map的key, 也可能是指针,看操作系统怎么处理的了。fd算是在某种程度上替代句柄吧;linux 有相应机制,但没有统一的句柄类型,各种类型的系统资源由各自的类型来标识,由各自的接口操作。 粗暴的解释: 最早的windows开发书籍,handle 是被翻译成 “把手” 的。虽然不好听,但是个人认为非常传神。 虽然你握住的只是把手,却能拉动整扇门,而且你根本不用在意那门长什么样子 一扇门如果有多个把手,被不同的人(进程)握住,门往哪儿走就不好说了 设计这么一个句柄的原因在于 句柄可以防止用户随意读写操作系统内核的文件对象 。 无论是linux 还是windows, 文件句柄总是和内核的文件对象相关联的,但如何关联细节用户并不可见。内核可以通过句柄计算出内核文件对象的地址

Emlog显示评论者IP地理位置

半腔热情 提交于 2019-12-05 14:00:46
教程简介 为你的评论区加入 已评论者的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-05 13:42:33
小程序功能:简单的父子进程之间的通讯,子进程负责每隔1s不断发送"message"给父进程,不需要跑多个应用实例,不需要用户输入。 首先上代码 #include<assert.h> #include<signal.h> #include<stdio.h> #include<sys/epoll.h> #include<sys/time.h> #include<sys/wait.h> #include<unistd.h> int fd[2]; int* write_fd; int* read_fd; const char msg[] = {'m','e','s','s','a','g','e'}; void SigHandler(int){ size_t bytes = write(*write_fd, msg, sizeof(msg)); printf("children process msg have writed : %ld bytes\n", bytes); } void ChildrenProcess() { struct sigaction sa; sa.sa_flags = 0; sa.sa_handler = SigHandler; sigaction(SIGALRM, &sa, NULL); struct itimerval tick = {0}; tick.it