UNIX再学习 -- 文件IO.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
UNIX再学习 -- 文件IO

UNIX再学习 -- 文件I/O 一、文件描述符 1、文件描述符简介 首先从文件描述符开始讲起。因为,对于内核而言,所有打开的文件都是通过文件描述符引用的。那么文件描述符到底是什么? 文件描述符(file descriptor)通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文件。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读、写一个文件时,使用 open 或 create 返回的文件描述符标识该文件,将其作为参数传送给 read 或 write。 2、标准输入、标准输出和标准错误 按照惯例,UNIX 系统 shell 把文件描述符 0 与进程的标准输入(stdin)关联,文件描述符 1 与标准输出(stdout)关联,文件描述符 2 与标准错误(stderr)关联。这是各种 shell 以及很多应用程序使用的惯例,与 UNIX 内核无关。尽管如此,如果不遵循这种惯例,很多 UNIX 系统应用程序就不能正常工作。 这部分讲 shell 编程重定向时,正好讲到了, POSIX 定义了 STDIN_FILENO、STDOUT_FILENO 和 STDERR_FILENO 来代替 0、1、2。这三个符号常量的定义位于头文件 unistd.h [cpp] view plain copy 在CODE上查看代码片派生到我的代码片 查看 /usr/include/unistd.h /* Standard file descriptors. */ #define STDIN_FILENO 0 /* Standard input. */ #define STDOUT_FILENO 1 /* Standard output. */ #define STDERR_FILENO 2 /* Standard error output. */ 文件描述符的有效范围是 0 到 OPEN_MAX。一般来说,每个进程最多可以打开 64 个文件(0 — 63)。对于 FreeBSD 8.0、Linux 3.2.0、Mac OS X 10.6.8 以及 Solaris 10 来说,文件描述符的变化范围几乎是无限的,它只受系统配置的存储器总量、整型的字长以及系统管理员所配置的软限制和硬限制的约束。 OPEN_MAX:每个进程最大打开文件数。查看如下: [cpp] view plain copy 在CODE上查看代码片派生到我的代码片 查看 man sysconf PEN_MAX - _SC_OPEN_MAX The maximum number of files that a process can have open at any time. Must not be less than _POSIX_OPEN_MAX (20). 或参看:man sysconf() [cpp] view plain copy 在CODE上查看代码片派生到我的代码片 #include unistd.h #include stdio.h int main (void) { printf(_SC_ARG_MAX: %ld\n, sysconf(_SC_ARG_MAX)); printf(_SC_CHILD_MAX: %ld\n, sysconf(_SC_CHILD_MAX)); printf(_SC_CLK_TCK: %ld\n, sysconf(_SC_CLK_TCK)); printf(_SC_NGROUPS_MAX: %ld\n, sysconf(_SC_NGROUPS_MAX)); printf(_SC_OPEN_MAX: %ld\n, sysconf(_SC_OPEN_MAX)); printf(_SC_JOB_CONTROL: %ld\n, sysconf(_SC_JOB_CONTROL)); printf(_SC_SAVED_IDS: %ld\n, sysconf(_SC_SAVED_IDS)); printf(_SC_VERSION: %ld\n, sysconf(_SC_VERSION)); return 0; } 输出结果: _SC_ARG_MAX: 2097152 _SC_CHILD_MAX: 7892 _SC_CLK_TCK: 100 _SC_NGROUPS_MAX: 65536 _SC_OPEN_MAX: 1024 _SC_JOB_CONTROL: 1 _SC_SAVED_IDS

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档