文件I/O编程

库函数文件编程类


更多详细内容请参考UNIX环境高级编程中文版

fopen

  • 函数名:

open

  • 函数原型:

int open(const char *pathname,int flags)
int open(const char *pathname,int flags,mode_t mode)

  • 函数功能:

打开或创建文件

  • 所属头文件

sys/types.h
sys/sdat.h
fcntl.h

  • 函数返回值:

成功:文件描述符
失败:-1

  • 函数参数:

pathname :要打开的文件名(含路径)
flags : 此函数多个选择项

   -O_RDONLY:只读方式
   -O_WRONLY:只写方式
   -O_RDWR:可读可写方式
 也可再接下列一个或多个参数
    O_APPEND:每次写时追加到文件的尾端
    O_CREAT:若此文件不存在则创建它
    O_EXCL:可测一个文件是否存在,不存在则创建,使得测试和创建两者为依哥原子操作
    O_TRUNC:如果此文件存在,而且为读写或只写成功打开,则将长度截短为0
    O_NOCTTY:如果pathname指的是终端设备,则不将此设备分配作为此进程的控制终端
    O_NONBLOCK:如果pathname指的是一个FIFO,一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I/O操作设置为非阻塞方式
    O_SYNC:使每次write都等到物理I/O操作完成>        

mode : 一定实在flags中使用了O_CREAT标志,mode记录待创建文件的访问权限
mode的取值如下参考:

  SIRWXU:00700 拥有者读写执行权限
  S_IRUSR: 00400 拥有者读权限
  S_IWUSR:00200  拥有者写权限
  S_IXUSR: 00100 拥有者执行权限
  S_IRWXG:00070 组内成员读写执行权限
  S_IRGRP: 00040 组内成员读权限
  S_IWGRP:00020  组内成员写权限
  S_IXGRP: 00010 组内成员执行权限
  S_IRWXO:00007 其他成员读写执行权限
  S_IROTH: 00004 其他成员读权限
  S_IWOTH:00002  其他成员写权限
  S_IXOTH: 00001 其他成员执行权限
也可以直接指定mode的值,如0777,0541等
  • 使用范例
#include 
#include 
#include 
#include 
int main()
{
    int fd;
    fd = open("./test.c",O_RDWR|O_CREAT,0660);
    if(fd < 0)
    {
        printf("fail\n");
    }
    else
    {
        printf("OK!\n");
    }
    return 0;
}

creat

  • 函数名:

creat

  • 函数原型:

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

  • 函数功能:

创建新文件

  • 所属头文件:

sys/types.h
sys/stat.h
fcntl.h

  • 函数返回值

成功: 文件描述符
失败: -1

  • 函数参数

pathname: 要创建的文件的文件名(含路径)
mode:创建文件的权限设置

  • 使用范例
#include 
#include 
#include 
#include 
int main()
{
    int fd;
    fd = creat("test.c",0660);
    if(fd < 0)
    {
        printf("fail\n");
    }
    else
    {
        printf("OK!\n");
    }
    return 0;
}

close

  • 函数名

close

  • 函数原型

int close(int fd);

  • 函数功能

关闭文件

  • 所属头文件

unistd.h

  • 函数返回值

成功: 0
失败:-1

  • 函数参数

fd:要关闭文件的文件描述符


read

  • 函数名

read

  • 函数原型

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

  • 函数功能

从文件里面读取数据

  • 所属头文件

unistd.h

  • 函数返回值

成功: 读取的字节数
失败: -1

  • 函数参数

fd:要读取的文件的文件描述符
buf:读出的数据在内存中存放的位置首地址
count: 读取数据的最大字节数

  • 使用范例
#include 
#include 
#include 
#include 

int main()
{
    int fd1,fd2;
    char buf[12];
    fd1 = open("test.c",O_RDONLY);
    if (fd1 < 0)
    {
        printf("the file is open fail!");
    }

    fd2 = read(fd1,buf,12);
    if (fd2 < 0)
    {
        printf("the file is creat fail!");
    }
    else
    {
        printf("the result is: %s",buf);
    }
    return 0;
}

write

  • 函数名

write

  • 函数原型

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

  • 函数功能

向文件里面写入数据

  • 所属头文件

unistd.h

  • 函数返回值

成功 : 写入的字节数
失败 : -1

  • 函数参数

fd:要写入的文件的文件描述符;
buf:要写入文件的数据在内存中存放位置的首地址;
count:写入的数据的最大字节数

  • 使用范例
#include 
#include 
#include 
#include 

int main()
{
    int fd1,fd2;
    char buf[12] = "Hello,Linux";
    fd1 = open("test.c",O_WRONLY|O_CREAT,0660);
    if (fd1 < 0)
    {
        printf("the file open fail!\n");
    }

    fd2 = write(fd1,buf,12);
    if (fd2 < 0)
    {
        printf("the file write fail!\n");
    }
    else
    {
        printf("success!\n");
    }
    return 0;
}

lseek

  • 函数名

lseek

  • 函数原型

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

  • 函数功能

重新定位文件的读写位置

  • 所属头文件

sys/types.h
unistd.h

  • 函数返回值

成功 : 返回移动后的文件指针距离文件头的位置
失败 : -1

  • 函数参数

fd:需要进行重新定位读写位置的文件的文件描述符
offset:位移量
whence:选项SEEK_SET, SEEK_CUR, or SEEK_END

    -SEEK_SET:设置位移量距离文件开始offset个字节
    -SEEK_CUR:设置该文件位移量为当前值加offest(可正可负)
    -SEEK_END:设置该文件的位移量为文件长度加offset
  • 使用范例
#include 
#include 
#include 
#include 

int main()
{
    int fd1,fd2,fd3;
    char bufr[9];
    char bufw[9]="123456789";
    fd1 = open("test.c",O_RDWR);
    if (fd1 < 0)
    {
        printf("the file is open fail!");
    }
    fd3 = write(fd1,bufw,7);
    if(fd3 < 0)
    {
        printf("the file write fail!\n");
    }

    lseek(fd1,2,SEEK_SET);

    fd2 = read(fd1,bufr,5);
    if (fd2 < 0)
    {
        printf("the file is creat fail!");
    }
    else
    {
        printf("the result is: %s\n",bufr);
    }
    return 0;
}

dup

  • 函数名

dup

  • 函数原型

int dup(int oldfd);

  • 函数功能

复制一个文件描述符

  • 所属头文件

unistd.h

  • 函数返回值

成功 : 返回新的文件描述符
失败 : -1

  • 函数参数

oldfd:待复制的文件描述符

  • 使用范例
#include 
#include 
#include 
#include 

int main()
{
    int fd,fd1,fd2,fd3;
    char bufr[9];
    char bufw[9]="123456789";
    fd1 = open("test.c",O_RDWR);
    if (fd1 < 0)
    {
        printf("the file is open fail!");
    }

    fd=dup(fd1);

    fd3 = write(fd,bufw,7);
    if(fd3 < 0)
    {
        printf("the file write fail!\n");
    }

    lseek(fd,2,SEEK_SET);

    fd2 = read(fd,bufr,5);
    if (fd2 < 0)
    {
        printf("the file is creat fail!");
    }
    else
    {
        printf("the result is: %s\n",bufr);
    }
    return 0;
}

更多详细内容请参考UNIX环境高级编程中文版

你可能感兴趣的:(Linux)