我的工作,那将在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有什么特别之处?相关推荐

  1. ftp linux 推送文件_Linux下SSH用FTP命令上传文件至另一个FTP空间

    如果没有ftp 提示: -bash: ftp: command not found 请先安装ftp应用程序: yum install ftp #ftp 127.0.0.1 21 输入远程空间的FTP ...

  2. putty怎么进入文件夹_如何利用putty工具上传文件 - 卡饭网

    图解使用FTP工具上传文件以FlashFXP为例 图解使用FTP工具上传文件以FlashFXP为例 现以FlashFXP为例,图解使用FTP工具上传文件. 1: 运行 LeapFTP,点击1处(站点- ...

  3. 【无标题】FTP文件夹错误:打开FTP服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。

    问题描述:通过我的电脑或资源管理器连接FTP服务器时提示"FTP文件夹错误:打开FTP服务器上的文件夹时发生错误.请检查是否有权限访问该文件夹.详细信息:The operation time ...

  4. 在电脑上解压计算机试题打不开,zip文件怎么打不开_电脑上zip文件打不开解决方法-win7之家...

    ZIP是一种相当简单的分别压缩每个文件的存档格式,在我们操作的电脑中,每当接收一些文件时常常都是zip文件格式,这时我们就可以通过解压文件的方式来进行打开,但是有些用户却遇到了无法打开的情况,那么zi ...

  5. linux的ftp轮询上传文件,Android中实现异步轮询上传文件

    前言 前段时间要求项目中需要实现一个刷卡考勤的功能,因为涉及到上传图片文件,为加快考勤的速度,封装了一个异步轮询上传文件的帮助类 效果 先上效果图 设计思路 数据库使用的框架是GreenDao,一个非 ...

  6. 文件传输服务器的默认端口,服务器上传文件端口

    服务器上传文件端口 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 安装传输工具 ...

  7. flask 接口上传文件_Flask干货:Flask数据交换——上传文件

    图 | 源网络文 | 5号程序员01 事情是这样的. 有一天五号程序员打算网购一盒巧克力送给自己的女朋友 想必女朋友收到礼物是这样的: 结果商家邮寄来的巧克力中夹着一张纸条: 害!你说气不气人,现在都 ...

  8. 服务器上的文件如何查看,如何查看远程服务器上的文件

    如何查看远程服务器上的文件 内容精选 换一换 分析辅助软件是一款支持部署到多台服务器目标环境上,实现对整个业务集群的数据采集和优化的组件.已成功登录Java性能分析.待安装分析辅助软件的服务器已开启s ...

  9. flask中使用FileField上传文件的两种方式+前端页面上传文件(flask三种上传文件方式)

    文章目录 上传文件方式一: 1.index.html文件: 2.主文件main.py: 上传文件方式二: 1.index2.html文件: 2.main.py文件: 上传文件方式三: 1.index3 ...

  10. java flex 上传文件_使用Flex和java servlet上传文件

    资源都是来自网上.本实例将展示使用Flex和java servlet上传文件. 事前准备就是到http://commons.apache.org 下载common-fileupload-1.1.1.j ...

最新文章

  1. 数据库的事务隔离技术 之 MVCC
  2. 关联矩阵古林法的matlab代码,[转载][原创]灰色关联分析及Matlab程序实现
  3. 你所不知道的mybatis居然也有拦截器
  4. MS SQL 语法大全
  5. python 爬取教务处通知
  6. Flutter UiKitView 嵌入iOS原生View
  7. hdu4521 小明系列的问题——小明序列(LIS变种 (段树+单点更新解决方案))
  8. 局域网中只有一台电脑无法连接共享打印机,其他电脑均可正常连接解决方案
  9. 华为模拟器linux,华为模拟器命令.doc
  10. 常见的加密算法原理与实现:MD5加密
  11. 2.14 视图的分页预览以及分页符的使用 [原创Excel教程]
  12. stm32 mp3软件音频解码案例分析流程(一)
  13. 微信惊现超级大Bug:试过的人都哭了...
  14. 使用opencv进行USB摄像头参数配置
  15. 《人物》:计算机世界第一人——艾兰·图灵(转贴)
  16. springboot汽车配件销售系统-预约洗车系统java
  17. 为啥只有IPv4和IPv6,没有IPv5呢?
  18. FileNotFoundException: /storage/emulated/0/Pictures/1582: open failed: EACCES (Permission denied)
  19. 六级翻译历年真题核心词汇汇总
  20. 就近原则:this关键字的用法总结

热门文章

  1. ssrs 存储过程参数配置_如何为纯模式配置报告服务(SSRS)
  2. 【Excel】如何用SUMIF实现SUMIFS的功能
  3. 交换排序之冒泡排序和快速排序
  4. uva 10098 Generating Fast(全排列)
  5. 【BZOJ 2595】2595: [Wc2008]游览计划 (状压DP+spfa,斯坦纳树?)
  6. TypeSDK免费手游多渠道SDK接入方案
  7. 使用postman模拟上传文件到springMVC的坑:the request was rejected because no multipart boundary was found...
  8. Extmail maildrop错误
  9. Linux kernel进行编译时提示No rule to make target `menconfig'
  10. 解决博易博客后台文章管理页面无法显示分页的问题