预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共11页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

linux的文件系统 linux的文件系统linux的文件系统linux文件I/O教程(1)一,文件描述符对内核而言,所以打开的文件都通过文件描述符引用。每个进程都有一些与之关联的文件描述符。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或creat返回的文件描述符标识该文件,将其作为参数传送给read和write。一般有三个以及打开的文件描述符,他们是:0:标准输入STDIN_FILENO1:标准输出STDOUT_FILENO2标准错误输出STDERR_FILENO每行后面的符号常量是依从POSIX而定的。open函数#include#include#includeintopen(constchar*pathname,intflags);intopen(constchar*pathname,intflags,mode_tmode);pathname是要打开或创建文件的名字。flag用来定义打开文件所采取的的动作,必须调用以下模式之一O_RDONLY,O_WRONLY,O_RDWR分别代表只读,只写,读写方式打开。open还可以包括以下可选模式的组合O_APPEND:把写入数据追加到文件的尾端O_CREAT:若文件不存在,则创建它。使用此选项时,需要第三个参数mode,用其指定该新文件的访问权限。O_EXCL:如果同时指定了O_CREAT,而文件存在,则会出错。用此可以测试一个文件是否存在,如果存在,则创建文件,这使测试和创建两者成为一个原子操作。O_TRUNC:如果此文件存在,而且为只写或读写成功打开,则将其长度截为0。open返回的文件描述符一定是最小的未用描述符数值。这一点被某些应用程序用在标准输入,标准输出或标准错误输出上。如,一个程序关闭了自己的标准输出,然后再次调用open,文件描述符1就会被调用,并且标准输出将被有效的重定向到另一个文件或设备。POSIX规范还标准化了一个creat调用,此函数等效于open(pathname,O_WONLY|O_CREAT|O_TRUNC,mode);close函数#includeintclose(intfd);close调用终止一个文件描述符fd与对应文件之间的关联。文件描述符被释放后并能重新使用。close调用成功返回0,出错返回-1.关闭一个文件时会释放该进程加在文件上的所有记录锁。当一个进程终止时,内核自动关闭它所有打开的文件。lseek函数每个打开的文件都有一个与其相关联的”当前文件偏移量”。按系统默认情况,当打开一个文件时,除非指定O_APPEND选项,否则该偏移量被设置为0。lseek可以为一个打开的文件设置偏移量。#include#includeoff_tlseek(intfd,off_toffset,intwhence);offset用来指定位置,whence参数定义该偏移值的用法。whence可取以下值:SEEK_SET:Theoffsetissettooffsetbytes.SEEK_CUR:Theoffsetissettoitscurrentlocationplusoffsetbytes.SEEK_END:Theoffsetissettothesizeofthefileplusoffsetbytes.成功调用返回从文件头到文件指针被设置处的字节偏移值,失败返回-1。参数offset定义在中。当偏移量大于文件长度时,出现空洞,空洞不占用存储区。read函数#includessize_tread(intfd,void*buf,size_tcount);将与文件描述符fd关联的文件中读入count个字符放到buf中。返回读入的字节数,它可能小于请求的字节数。如果read调用返回0,就表示未读入任何数据,已到达了文件尾。返回-1,就表示出错。write函数#includessize_twrite(intfd,constvoid*buf,size_tcount);把缓冲区buf的前count个字节写入与文件描述符fd相关联的文件中。返回实际写入的字节数,通常与count值相同;否则表示出错。出错的一个常见原因是:磁盘已写满,或者超出了一个给定进程的文件长度限制。实例:创建一个文件,写入数据,移动当前偏移量,在读数据。#include//必须最早出现,因为它可能会影响到其他头文件。#include#include#include#includeintmain()char*filename=".//file";charbuf[100];charbuf1[5];intfd;printf("openafiletowriten");if((fd=open(