首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

第三章 资料I/O 一

2012-11-07 
第三章文件I/O 一一,名词说明文件描述符针对内核,所有打开文件都是文件描述符引用.文件描述符是一个非负数

第三章 文件I/O 一
一,名词说明

文件描述符
    针对内核,所有打开文件都是文件描述符引用.文件描述符是一个非负数整数.当打开一个现存文件或创建一个新的文件时,内核向进程返回一个文件描述符.
    按照惯例,UNIX shell使用描述符0与进程的标准输入相结合,文件描述符1与标准输出相结合,文件描述符2与标准出错输出相结合.这些是UNIX shell以及很多应用程序的惯例,与内核无关.不遵照这种惯例,很多UNIX应用程序就不能工作.

magic number(幻数)
    幻数检查用来检查文件中是否有特殊的固定格式的数据.规范的例子如二进制可执行文件(编译后的程序)a.out,该文件格式在标准include目录下的a.out.h文件中定义,也可能在exec.h中定义.这些文件在文件开始部分附近的一个特殊位置保存有一个'幻数',通过幻数告诉UNIX操作系统此文件是二进制可执行文件,和其中包含的其它类型.幻数的概念已经扩展到数据文件.任何在文件固定位置有与文件类型相关的不变标识符的文件都可以这样表示.这些文件中的信息可以从幻数文件/usr/share/magic中读取.

二,常数说明

#include <sys/types.h>#include <sys/stat.h>#include "ourhdr.h"char buf1[] = "abcdefghijklmnopqrstuvwxyz";char buf2[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";int main(void){ int fd; if((fd = creat("file.hole", FILE_MODE)) < 0) err_sys("creat error"); if (write(fd, buf1, 10) != 10) err_sys("buf1 write error"); if(lseek(fd, 40, SEEK_SET) == -1) err_sys("lseek error"); if(write(fd, buf2, 10) != 10) err_sys("buf2 write error"); exit(0);}

read函数:从打开文件中读数据
ssize_t rea(int filedes, void buff, size_t nbytes)返回:读到的字节数,文件结尾 0,出错 -1
际读到的字节数少于要求读字节数的情况:
  ? 读普通文件时,在读到要求字节数之前已到达了文件尾端。例如,若在到达文件尾端之前还有30个字节,而要求读 100个字节,则read返回30,下一次再调用read时,它将返回0(文件尾端)。
  ? 当从终端设备读时,通常一次最多读一行。
  ? 当从网络读时,网络中的缓冲机构可能造成返回值小于所要求读的字节数。
  ? 某些面向记录的设备,例如磁带,一次最多返回一个记录。

write函数:向打开文件写数据
ssize_t write(int filedes, const void buff, size_t nbytes返回:成功 以写的字节数 出错 -1
其返回值通常与参数nbytes的值相同,否则表示出错.write出错的常见原因:磁盘已写满,或者超过了对一个给定进程的文件长度限制.

热点排行