Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1414784
  • 博文数量: 842
  • 博客积分: 12411
  • 博客等级: 上将
  • 技术积分: 5772
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-14 14:43
文章分类

全部博文(842)

文章存档

2013年(157)

2012年(685)

分类: LINUX

2012-04-09 23:27:12




open 函数

 #include

      #include

      #include

      int open(const char *pathname, int oflag, …/*, mode _t mode * / ) ;

      功能:打开文件

      返回: 若成功为文件描述符,若出错为 -1,出错时errno被设置

pathname 是要打开或创建的文件的名字。

      oflag 参数可用来说明此函数的多个选择项。

      对于 open 函数而言 ,仅当创建新文件时才使用第三个参数。

      : 三参数 … , I S O C 表示参数类型和个数不定 .

oflag 值:

O_R DONL Y只读打开

O_WRONL Y只写打开     此三者必选其一

O_R D WR读、写打开

 

O_APPEND每次写时都加到文件的尾端

 

O_CR EAT若此文件不存在则创建它。使用此选择项时,需同时说明第三个参数mode ,用其说明该新文件的存取许可权位

 

O_EX CL:如果同时指定了 O_CR EAT ,而文件已经存在,则出错。这可测试一个文件是否存在,如果不存在则创建此文件成为一个原子操作

 

O_TRUNC如果此文件存在,而且为只读或只写成功打开,则将其长度截短为 0

 

O_NOCTTY如果 pathname 指的是终端设备,则不将此设备分配作为此进程的控制终端

 

O_NON BLOCK:如果 pathname 指的是一个 FIFO 、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的 I / O 操作设置非阻塞方式

 

O_SYNC使每次 write 都等到物理 I / O 操作完成

 

MODE

S_ I RWX U

用户主的读写和 执行权

S_ I RU SR

用户读

S_ I W USR

S_ I X USR

用户写

用户 执行

S_ I RWXG

组的读写

S_ I RGRP

组读

S_ I WGRP

组写

S_ I XGRP

组执

S_ I RWX O

其它 人的读写

S_ I ROTH

其它 人读

S_ I W OTH

其它 人写

S_ I X OTH

其它 执行

 

creat 函数

# include

       # include

       # include

       int creat(const char * pathname, mode _ t mode) ;

       功能: 创建一个新的文件。

       返回: 若成功为 写打开的文件描述符, 若出错为 - 1

              注意,此函数等效于:. open (pathname, O _WR ONL Y | O _CR EAT | O_TRUNC, mode) ;

              creat 的一个不足之处是它以只写方式打开所创建的文件。

 

close 函数

# include

    int close (int filedes)

    功能:关闭一个打开文件

    返回: 若成功为0 ,若出错为 - 1

    当一个进程终止时,它所有的打开文件都由内核自动关闭。很多程序都使用这一功能而不显式地用close关闭打开的文件。

 

lseek 函数

每个打开文件都有一个与其关联的当前文件偏移量。它是一个非负整数,用以度量从文件开始处计算的字节数。通常,读、写操作从当前文件偏移量处开始,并使偏移量增加所读或写的字节数。按系统默认 ,当打开一个文件时,除非指定O _APP END 选择项,否则该位移量被设置为 0

       可以调用 lseek 显式地定位一个打开文件。

       # include

       # include

       off _ t lsee k (int filesdes, off _t offset, int whence) ;

       功能:设置文件内容读写位置

       返回: 若成功为新的文件位 ,若 出错为 - 1

       对参数 offset 的解释与参数 whence 的值 有关。

       whenceSEEK_SET,则将该文件的位移量设置为距文件开始处offset 个字节。

       whenceSEEK_CUR,则将该文件的位移量设置为其当前值加offsetoffset 可为正或负。

       whence SEEK_END,则将该文件的位移量设置为文件长度加 offsetoffset 可为正或负。

 

read 函数

         #include

              ssize_t read(int fd, void *buf, si ze_t count);

              功能: 从打开文件中读数据

              返回:读到的字节数,若已到文件尾为0,若出错为- 1

       有多种情况可使实际读到的字节数少于要求读字节数:

       读普通文件时,在读到要求字节数之前已到达了文件尾端。例如,若在到达文件尾端之前还有30个字节,而要求读100个字节,则read返回 3 0 ,下一次 再调用read时,它将返回0(文件尾端)。当从终端设备读时,通常以行为单位,读到换行符就返回。

       当从网络读时,网络中的缓冲机构可能造成返回值小于所要求读的字节数。

       某些面向记录的设备,例如磁带,一次最多返回一个记录。

       读操作从文件的当前位移量处开始,在成功返回之前,该位移量增加实际读得的字节数。

 write 函数

       #include

       ssize_t write(int fd, const void *buf, size_t count);

       功能;向打开文件写数据。

       返回:若成功为已写的字节数,若出错为-1

       其返回值通常与参数count的值不同,否则表示出错。write出错的一个常见原因是:磁盘已写满,或者超过了对一个给定进程的文件长度限制。

       对于普通文件,写操作从文件的当前位移量处开始。如果在打开该文件时,指定了O_APP END选择项,则在每次写操作之前,将文件位移量设置在文件的当前结尾处。在一次成功写之后,该文件位移量增加实际写的字节数。

 

pread & pwrite 函数

       ssi ze_t pread(int filedes, void *buffer, size_t size, off _t offset)

       ssi ze_t pwrite(int filedes, const void *buffer, size_t size, off _t offset)

       类似于readwrite,只是读写不是从文件当前位置开始,而是从offset位置开始,并且函数执行完后也不影响当前文件指针位置,即指针位置不改变。

 

fcntl 函数

                     #include

                     #include

                     int fcntl(int filedes, int cmd, ... ) ;

                     功能:改变已经打开文件的性质

                     返回:若成功则依赖于cmd(),若出错为-1

       fcntl 函数有五种功能:

              复制一个现存的描述符,新文件描述符作为函数值返(cmdF_DUPFD)。

              获得/设置文件描述符标记,对应于filedes的文件描述符标志作为函数值返回.(cmd=F_GET FDF_SETFD)。

              获得/设置文件状态标志,对应于filedes的文件状态标志作为函数值返回。(cmd=F_GETFLF_SETFL)。

              获得/设置异步I/Ocmd=F_GETOWNF_SETOWN)。

              获得/设置记录锁(cmd=F_SETLK,F_SETLKW

 

文件状态 

标志说明

O _R DONL Y

只读打开

O _WR ONL Y

只写打开

O _R D WR

/ 写打开

O_APP END

写时都添加至文件尾

O _ NON B LOC K

非阻塞方式

O _SY NC

等待写完成

O _ASY NC

异步 I / O

 

ioctl 函数

       ioctl函数是I /O操作的杂物箱。不能用本章中其他函数表示的I/O操作通常都能用ioctl表示。终端I/Oioctl的最大使用方面,主要用于设备的I/O控制。

              #include

              int ioctl(int filedes, int request, . . . ) ;

              返回:若出错则为-1,若成功则为其他值。

       例如:串口线上传送的数据通过readwrite来操作,而串口的波特率、校验位、停止位可以通过ioctl来设置。

 

测试文件类型

   类型,即文件的分类(例如:它是一个普通文件,还是符号链接,还是某种特殊文件)

       使用 stat 函数取得文件的状态信息以进行测试

       #include

       int stat(const char * path, struct stat *sbuf);

       stat提供有关文件的丰富信息,包括大小、所有者、组、最后修改时间等。

       int fstat(int fd, struct stat *sbuf);

       fstat功能和stat相同,只是通过文件描述符来进行操作,而不是通过文件名。

       函数出错返回 -1 ,否则返回 0

 

struct stat 结构

       struct stat {

              mode_t st_mode; // 文件对应的模式,文件, 目录等

              ino_t st_ino; //inode 节点号

              dev _

阅读(797) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~