unix环境高级编程之一( 基本I/O函数)

1.open 函数

     调要open函数可以打开或创建一个文件。

     格式:

          #include <fcnt1.h>

          int open(const char *pathname,int oflag,---);

     注释:      pathname是需要打开的文件;

                   oflag参数用来说明此函数的多个选项。用 O_RDONLY(只读),O_WRONLY(只写),O_REWR(读写)(这三个常量有且只能指定一个)和其余的多个常量进行或运算构成:

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

                   O_CREAT         若文件不存在则创建它,需要第三个参数为指定文件的访问权限

                   O_EXCL           若同时指定O_CREAT,而文件存在则会出错,用此则可以测试文件是否存在,若不存在则创建这个文件

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

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

                   O_NONBLOCK   非阻塞模式

                   -----是根据第二个参数进行操作的

 

2.create函数

    #include <fcnt1.h>

     int create(const char *pathname,mode_t mode);

     相当于 open(pathname,O_WRONLY | O_CREAT | O_TRUNC,mode);

 

3.close函数

    #include<fcnt1.h>

    int close (int filedes); 返回值若成功返回0不成功返回-1

 

4.lseek函数

     可以用lseek显式地为一个打开的文件设置其偏移量。

    #include<unistd.h>

     off_t lseek(int fileds,off_t offset,int whence);

      whence是SEEK_SET,则将该文件的偏移量设置为距文件开始出offset个字节

     whence是SEEK_CUR,--------------------- 当前值加offset,offset可正可负

      whence是SEEK_END -----------------------文件长度加offset-----------

      off_t currpos;

       currpos = lseek(fd.0,SEEK_CUR);

     返回值:若成功则返回新的文件偏移量,若出错则返回-1

        每个打开的文件都有一个与其相关联的“当前文件偏移量”。它通常是一个非负整数,用以度量从文件开始处计算的字节数。

 

5.read函数

     从打开的文件中读数据到buf

     #include <unistd.h>

      ssize_t read(int filedes,void *buf,size_t nbytes);

      返回值:若成功则返回读到的字节数,若已到文件结尾则返回0,若出错返回-1

6.write函数

      #include <unistd.h>

      ssize_t write(int filedes,const void *buf,size_t nbytes);

      返回值:若成功则返回字节数,若出错返回-1

 

7.pread,pwrite函数:

     主要用于解决文件共享问题:

      #include<unistd.h>

      ssize_t pread(int filedes,void *buf,size_t nbytes,off_t offset);

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

      ssize_t pwrite(int filedes,const void *buf,size_t nbytes,off_t offset);

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

    

调用pread相当于顺序执行lseek和read,

调用pwrite相当于顺序执行lseek和write,

 

8.dup和dup2函数

     这两个函数都用来复制一个现存的文件描述符

      #include <unistd.h>

      int dup(int filedes);    

      int dup2(int filedes,int filedes2); filedes2参数指定新描述符的数值。如果filedes2已经打开,则先关闭。

                      返回值:若成功返回新的文件描述符,若出错则返回-1

      

9.sync,fsync ,fdatasync函数:

         为了解决延迟写的问题,保证磁盘上实际文件系统和缓冲区高速缓存中内容的一致性。

        #include <unistd.h>

         int fsync(int filedes);           只对由文件描述符filedes指定的单一文件其作用,并且等待写磁盘操作结束

         int fdatesync(int filedes);     功能和fsync差不多,但它还同步更新文件的属性

        void sync(void);                   将所有修改过的快缓冲区排入写队列,然后返回,它并不等待实际写磁盘操作结束

 

10.fcnt1函数

        可以改变已打开的文件性质

        #include <fcnt1>

         int fcnt1(int filedes,int cmd,---);

         具体的请查看资料

11.ioct1函数

        其他函数都无法完成的操作,

        int ioct1(int filedes ,int request,----);

 

                   

posted @ 2012-07-08 14:24  黑-色-柳—丁  阅读(899)  评论(0编辑  收藏  举报