linux文件描述符有什么用,linux上的文件描述符3有什么特别之处?
我的工作,那将在Linux和Mac OS X上运行的服务器应用程序它是这样的:linux上的文件描述符3有什么特别之处?
启动主要应用
控制器进程的叉
调用lock_down()在控制过程中
再次叉终止主要应用
控制器进程,然后,创建工作进程
最终控制器保持分叉更多的工作呃进程
我可以使用多种方法(例如,系统日志或文件),但现在我正在思考syslog。 “有趣的是”在控制器进程中没有系统日志输出,除非我在下面包含#ifdef部分。
工作人员可以在Mac OS X和Linux中完美处理日志,无论是否具有下面的ifdef'ed部分。该控制器还可以在没有#ifdef'ed部分的情况下在Mac OS X中完美记录,但是在Linux上,如果我想要从控制器进程中查看任何输出到syslog(或该日志文件),则需要ifdef。
那么,为什么呢?
static int
lock_down(void)
{
struct rlimit rl;
unsigned int n;
int fd0;
int fd1;
int fd2;
// Reset file mode mask
umask(0);
// change the working directory
if ((chdir("/")) < 0)
return EXIT_FAILURE;
// close any and all open file descriptors
if (getrlimit(RLIMIT_NOFILE, &rl))
return EXIT_FAILURE;
if (RLIM_INFINITY == rl.rlim_max)
rl.rlim_max = 1024;
for (n = 0; n < rl.rlim_max; n++) {
#ifdef __linux__
if (3 == n) // deep magic...
continue;
#endif
if (close(n) && (EBADF != errno))
return EXIT_FAILURE;
}
// attach file descriptors 0, 1 and 2 to /dev/null
fd0 = open("/dev/null", O_RDWR);
fd1 = dup2(fd0, 1);
fd2 = dup2(fd0, 2);
if (0 != fd0)
return EXIT_FAILURE;
return EXIT_SUCCESS;
}
camh很接近,但是使用closelog()是这样做的想法,所以荣誉归功于jilles。除了在syslogs脚下关闭文件描述符之外,还有其他的东西必须继续。为了使代码工作,我添加了一个调用closelog()只是在循环之前:
closelog();
for (n = 0; n < rl.rlim_max; n++) {
if (close(n) && (EBADF != errno))
return EXIT_FAILURE;
}
我依靠手册页的逐字理解,他说:
使用openlog的( )是可选的;它会自动被syslog()调用,如果有必要...
我解释这是说syslog会检测文件描述符是否在它下面关闭。显然它没有。需要在linux上显式地使用closelog()来告诉syslog描述符已关闭。
还有一件事仍令我感到困惑的是,没有使用closelog()阻止第一个分支进程(控制器)打开并使用日志文件。以下分叉进程可以使用syslog或日志文件而不会造成问题。也许文件系统中存在一些缓存效应,使第一个分支进程具有哪个文件描述符可用的不可靠“想法”,而下一组分支进程是否被充分延迟以不受此影响?
2010-08-20
colding
+3
+1 //'deep magic ...':-)当你拥有Linux内核时,谁需要Harry Potter? –
2010-08-20 22:33:23
+0
那么在那一点上fd 3上的内容是什么? –
2010-08-20 22:42:14
+0
@David。与内核无关。内核中甚至没有fd 0,1和2。 –
2010-08-20 23:59:07
linux文件描述符有什么用,linux上的文件描述符3有什么特别之处?相关推荐
- ftp linux 推送文件_Linux下SSH用FTP命令上传文件至另一个FTP空间
如果没有ftp 提示: -bash: ftp: command not found 请先安装ftp应用程序: yum install ftp #ftp 127.0.0.1 21 输入远程空间的FTP ...
- putty怎么进入文件夹_如何利用putty工具上传文件 - 卡饭网
图解使用FTP工具上传文件以FlashFXP为例 图解使用FTP工具上传文件以FlashFXP为例 现以FlashFXP为例,图解使用FTP工具上传文件. 1: 运行 LeapFTP,点击1处(站点- ...
- 【无标题】FTP文件夹错误:打开FTP服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。
问题描述:通过我的电脑或资源管理器连接FTP服务器时提示"FTP文件夹错误:打开FTP服务器上的文件夹时发生错误.请检查是否有权限访问该文件夹.详细信息:The operation time ...
- 在电脑上解压计算机试题打不开,zip文件怎么打不开_电脑上zip文件打不开解决方法-win7之家...
ZIP是一种相当简单的分别压缩每个文件的存档格式,在我们操作的电脑中,每当接收一些文件时常常都是zip文件格式,这时我们就可以通过解压文件的方式来进行打开,但是有些用户却遇到了无法打开的情况,那么zi ...
- linux的ftp轮询上传文件,Android中实现异步轮询上传文件
前言 前段时间要求项目中需要实现一个刷卡考勤的功能,因为涉及到上传图片文件,为加快考勤的速度,封装了一个异步轮询上传文件的帮助类 效果 先上效果图 设计思路 数据库使用的框架是GreenDao,一个非 ...
- 文件传输服务器的默认端口,服务器上传文件端口
服务器上传文件端口 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 安装传输工具 ...
- flask 接口上传文件_Flask干货:Flask数据交换——上传文件
图 | 源网络文 | 5号程序员01 事情是这样的. 有一天五号程序员打算网购一盒巧克力送给自己的女朋友 想必女朋友收到礼物是这样的: 结果商家邮寄来的巧克力中夹着一张纸条: 害!你说气不气人,现在都 ...
- 服务器上的文件如何查看,如何查看远程服务器上的文件
如何查看远程服务器上的文件 内容精选 换一换 分析辅助软件是一款支持部署到多台服务器目标环境上,实现对整个业务集群的数据采集和优化的组件.已成功登录Java性能分析.待安装分析辅助软件的服务器已开启s ...
- flask中使用FileField上传文件的两种方式+前端页面上传文件(flask三种上传文件方式)
文章目录 上传文件方式一: 1.index.html文件: 2.主文件main.py: 上传文件方式二: 1.index2.html文件: 2.main.py文件: 上传文件方式三: 1.index3 ...
- java flex 上传文件_使用Flex和java servlet上传文件
资源都是来自网上.本实例将展示使用Flex和java servlet上传文件. 事前准备就是到http://commons.apache.org 下载common-fileupload-1.1.1.j ...
最新文章
- 数据库的事务隔离技术 之 MVCC
- 关联矩阵古林法的matlab代码,[转载][原创]灰色关联分析及Matlab程序实现
- 你所不知道的mybatis居然也有拦截器
- MS SQL 语法大全
- python 爬取教务处通知
- Flutter UiKitView 嵌入iOS原生View
- hdu4521 小明系列的问题——小明序列(LIS变种 (段树+单点更新解决方案))
- 局域网中只有一台电脑无法连接共享打印机,其他电脑均可正常连接解决方案
- 华为模拟器linux,华为模拟器命令.doc
- 常见的加密算法原理与实现:MD5加密
- 2.14 视图的分页预览以及分页符的使用 [原创Excel教程]
- stm32 mp3软件音频解码案例分析流程(一)
- 微信惊现超级大Bug:试过的人都哭了...
- 使用opencv进行USB摄像头参数配置
- 《人物》:计算机世界第一人——艾兰·图灵(转贴)
- springboot汽车配件销售系统-预约洗车系统java
- 为啥只有IPv4和IPv6,没有IPv5呢?
- FileNotFoundException: /storage/emulated/0/Pictures/1582: open failed: EACCES (Permission denied)
- 六级翻译历年真题核心词汇汇总
- 就近原则:this关键字的用法总结
热门文章
- ssrs 存储过程参数配置_如何为纯模式配置报告服务(SSRS)
- 【Excel】如何用SUMIF实现SUMIFS的功能
- 交换排序之冒泡排序和快速排序
- uva 10098 Generating Fast(全排列)
- 【BZOJ 2595】2595: [Wc2008]游览计划 (状压DP+spfa,斯坦纳树?)
- TypeSDK免费手游多渠道SDK接入方案
- 使用postman模拟上传文件到springMVC的坑:the request was rejected because no multipart boundary was found...
- Extmail maildrop错误
- Linux kernel进行编译时提示No rule to make target `menconfig'
- 解决博易博客后台文章管理页面无法显示分页的问题