linux下文件描述符的介绍

(2012-10-02 16:01:56)

转载
标签:

描述符

调用

返回

进程

限制

it

分类:linux
当某个程序打开文件时,操作系统返回相应的文件描述符,程序为了处理该文件必须引用此描述符。所谓的文件描述符是一个低级的正整数。最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出(stdout)和标准错误(stderr)对应。因此,函数scanf() 使用 stdin,而函数 printf() 使用 stdout。你可以用不同的文件描述符改写默认的设置并重定向进程的I/O 到不同的文件。

1、首先说什么是文件描述符,它有什么作用?
文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。第一个打开的文件是0,第二个是1,依此类推。Unix操作系统通常给每个进程能打开的文件数量强加一个限制。更甚的是,unix 通常有一个系统级的限制。
因为squid 的工作方式,文件描述符的限制可能会极大的影响性能。当squid用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。直到一部分当前请求完成,相应的文件和socket被关闭,squid 不能接收新请求。当squid发现文件描述符短缺时,它会发布警告。
在运行./configure 之前,检查你的系统的文件描述符限制是否合适,能给你避免一些麻烦。大多数情况下,1024个文件描述符足够了。非常忙的cache可能需要4096或更多。在配置文件描述符限制时,我推荐设置系统级限制的数量为每个进程限制的2倍。
2、怎么突破,具体方法?
先查看LINUX默认的文件描述符:
# ulimit -n
1024
我们用命令
ulimit -HSn 65536
来增大文件描述符,然后编译安装squid,
把ulimit -HSn 65536放到/etc/rc.d/rc.local让启动时加载。
以下为转载:
Linux
在Linux 上配置文件描述符有点复杂。在编译squid 之前,你必须编辑系统include 文件中的一个,然后执行一些shell命令。请首先编辑/usr/include/bits/types.h 文件,改变__FD_SETSIZE 的值:
#define _ _FD_SETSIZE 8192
下一步,使用这个命令增加内核文件描述符的限制:
# echo 8192 >; /proc/sys/fs/file-max
最后,增加进程文件描述符的限制,在你即将编译squid 的同一个shell 里执行:
sh# ulimit -Hn 8192
该命令必须以root 运行,仅仅运行在bash shell。不必重启机器。
使用这个技术,你必须在每一次系统启动后执行上述echo 和ulimit 命令,或者至少在squid 启动之前。假如你使用某个rc.d脚本来启动squid,那是一个放置这些命令的好地方。
补充: 
  
文件描述符
是个很小的正整数,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。 
  文件描述符的优点:兼容POSIX标准,许多
Linux

UNIX
系统调用都依赖于它。
  文件描述符的缺点:不能移植到UNIX以外的系统上去,也不直观。
    基于文件描述符的输入输出函数:
  open:打开一个文件,并指定访问该文件的方式,调用成功后返回一个文件描述符。
  creat:打开一个文件,如果该文件不存在,则创建它,调用成功后返回一个文件描述符。
  close:关闭文件,进程对文件所加的锁全都被释放。
  read:从文件描述符对应的文件中读取数据,调用成功后返回读出的字节数。
  write:向文件描述符对应的文件中写入数据,调用成功后返回写入的字节数。
  ftruncate:把文件描述符对应的文件缩短到指定的长度,调用成功后返回0。
  lseek:在文件描述符对应的文件里把文件指针设定到指定的位置,调用成功后返回新指针的位置。
  fsync:将所有已写入文件中的数据真正写到磁盘或其他下层设备上,调用成功后返回0。
  fstat:返回文件描述符对应的文件的相关信息,把结果保存在structstat中,调用成功后返回0。
  fchown:改变与打开文件相关联的所有者和所有组,调用成功后返回0。
  fchmod:把文件描述符对应的文件的权限位改为指定的八进制模式,调用成功后返回0。
  flock:用于向文件描述符对应的文件施加建议性锁,调用成功后返回0。
  fcntl:既能施加建议性锁也能施加强制性锁,能建立记录锁、读取锁和写入锁,调用成功后返回0。
  dup:复制文件描述符,返回没使用的文件描述符中最小的编号。
  dup2:由用户指定返回的文件描述符的值,用来重新打开或重定向一个文件描述符。
  select:同时从多个文件描述符读取数据或向多个文件描述符写入数据

linux下文件描述符的介绍相关推荐

  1. Linux下文件描述符

    Linux下文件描述符 标签: linuxfilelinux内核apacheunixsocket 2012-08-17 15:45 5798人阅读 评论(0) 收藏 举报 分类: 调优和安全(5) 版 ...

  2. linux用户文件描述符2表示,Linux下文件描述符

    Linux下文件描述符 文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket.第一个打开的文件是0,第二个是1,依此类推.Unix操作系 统通常给每个进程能打开的文件数量强加一个 ...

  3. linux 文件指针,Linux中文件描述符fd与文件指针FILE*互相转换实例解析

    本文研究的主要是Linux中文件描述符fd与文件指针FILE*互相转换的相关内容,具体介绍如下. 1.文件描述符fd的定义:文件描述符在形式上是一个非负整数.实际上,它是一个索引值,指向内核为每一个进 ...

  4. 深入理解Linux/Unix文件描述符和epoll

    Linux/Unix 文件描述符(File Describer)的本质 Linux/Unix(以下简称Linux)系统中,每个进程都有一个专用的数组,数组的元素是一个结构体,称为文件描述符File D ...

  5. linux中文件描述符fd和文件指针flip的理解

    整理自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html 简单归纳:fd(file descriptor)只是一个整数,在ope ...

  6. Linux中文件描述符1,linux内核中的文件描述符(一)--基础知识简介

    原标题:linux内核中的文件描述符(一)--基础知识简介 Kernel version:2.6.14 CPU architecture:ARM920T Author:ce123(http://blo ...

  7. linux存储--文件描述符fd与FILE结构体(二)

    文件描述符fd 对于linux而言,所有对设备(对于linux而言,一切皆文件)和文件的操作都使用文件描述符来进行的. 文件描述符是一个非负的整数,它是一个索引值,指向内核中每个进程打开文件的记录表. ...

  8. linux存储--文件描述符以及file结构体(一)

    一.什么是文件描述符 在Linux下一切皆文件,对于内核而言,所有打开的文件都通过文件描述符引用,文件描述符是一个非负整数,当打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符.当读. ...

  9. Linux服务器文件描述符最大值修改

    文件描述符的有效范围是 0 到 OPEN_MAX.Linux 2.4.22 强制规定最多不能超过 1,048,576 . 文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件.文件描述符与包 ...

最新文章

  1. ARP协议的报文格式
  2. opencv6.1-imgproc图像处理模块之平滑与形态学操作
  3. [唐诗]182宫中行乐词(其一)-李白
  4. OS- -内存之页面置换算法
  5. IOS基础之使用UICollectionView纯代码创建
  6. PowerDesigner 逆向工程 从SQL文件转换成PDM 从PDM转成CDM
  7. 华为鸿蒙osbeta发布会,华为鸿蒙 OS Beta 3
  8. es6 SharedArrayBuffer对象
  9. centos mysql单向同步,虚拟机下实现Centos5.6下Mysql双向同步配置
  10. FZU 1402 猪的安家 中国剩余定理
  11. Polkadot 0.9.2版本正式发布,对平行链启动至关重要
  12. matlab 图像处理之直线拟合
  13. 拉杆音响电池升压芯片4.2V转12V2.5A大功率升压芯片
  14. 中国企业培训的十大缺陷(zt)
  15. edge播放视频HTML5黑屏,Win10 edge 浏览器 播放视频黑屏解决方法
  16. 全球及中国DNA测序行业发展与竞争状况分析报告2022~2027年
  17. linux查询服务器域名解析记录
  18. 干掉广告和钓鱼,这款神器绝了!
  19. Microsoft Azure第一步——试用帐户申请
  20. JAVA WEB整合开发王者归来 -- 读书笔记 by CZF 完整版

热门文章

  1. education and lectures
  2. CSSE*PTC student tutoring program student lecturers of 2018-2019 Academic Year.
  3. comp 313 schemas的学习
  4. C++风格与C风格文件读写效率测试-vs2015,vs2017
  5. Java入门系列-11-类和对象
  6. 同时开左右两个SAPGUI编辑器显示同一段ABAP代码
  7. 《Adobe Dreamweaver CC经典教程》——导读
  8. PHP 7安装使用体验,升级PHP要谨慎
  9. 直接拿来用!最火的Android开源项目(完结篇)(转)
  10. IPsec-×××基本技术挖掘