文件IO-概念、打开、读写定位

目录

文件IO介绍

文件描述符

文件IO的打开使用

umask

文件IO文件的关闭

文件IO的读写定位

    文件IO-读

    文件IO-写


文件IO介绍

文件IO又称系统IO,系统调用

是操作系统提供的API接口函数

文件IO:posix(可移植操作系统接口)定义的一组函数

文件IO不提供缓冲机制(与标准IO最大的区别),每次读写操作都引起系统调用

核心概念是文件描述符

访问各种类型文件

Linux下,标准IO基于文件IO实现

文件IO的API函数:

文件IO-概念、打开、读写定位_第1张图片

 注意:文件IO的函数和标准IO的函数不能混用;

文件描述符

文件IO中每个打开的文件都对应一个文件描述符(类似于文件流指针)

文件描述符是一个非负整数。Linux为程序中每个打开的文件分配一个文件描述符。

文件描述符从0开始时分配,依次递增,范围是0-1023,其中0/1/2具有特殊含义,0表示标准输入,1是标准输出,2是标准错误。

文件IO操作通过文件描述符来完成。

文件IO的打开使用

文件IO打开文件使用的函数是open()

open函数用来创建或打开一个文件:

#include

int open(const char *pathname,int flages);(打开文件已存在,不需要新建)

int open(const char *pathname,int flags,mode_t mode);(当需要新建文件时需要用到第三个参数)

成功时返回文件描述符;出错时返回EOF

打开文件时使用两个参数

#include 
#include 
#include 

int main() 
{
    int fd;
    char buf[32];
    fd = open("1.txt",O_WRONLY | O_TRUNC | O_CREAT);
    if (fd < 0) {
        perror("open");
        return 0;
    }
    
    strcpy(buf,"hello");
    write(fd,buf,strlen(buf);
    read(fd,buf,32);
    printf("%s\n",buf);
    close(fd);
    
    return 0;
}

创建文件时,第三个参数指定新文件的权限,(只有在建立新文件时有效)此外真正建文件时的权限会受到umask值影响,实际权限是mode-umaks

open函数可以打开设备文件,但是不能创建设备文件(创建设备文件使用mknode函数,后面驱动部分讲)

pathname 被打开的文件名(可包括路径名)

flags        O_RDONLY:只读方式打开文件

                O_WRONLY:可写方式打开文件

                O_RDWR:读写方式打开文件

        这三个函数互斥,不能一起使用

                O_CREAT:如果该文件不存在,就创建一个新的文件,并用第三个参数为其设置权限

                O_EXCL:如果使用O_CREAT时文件存在,则返回错误信息,这一参数可测试文件时候存在。

                O_NOCTTY:使用本参数时,如文件为终端,那么终端不可以作为调用open()系统调用的那个进程的控制终端

                O_TRUNC:如文件已经存在,那么打开文件时先删除原文件中的内容

                O_APPEND:以调价方式打开文件,所有对文件的操作都在文件的末尾进行

mode 被打开文件的存取权限,为8进制表示法。

文件IO和标准IO的模式对应关系:

r O_RDONLY

r+ O_RDWR

w O_WRONLY | O_CREAT | O_TRUNC, 0664

w+ O_RDWR | O_CREAT | O_TRUNC, 0664

a O_WRONLY | O_CREAT | O_APPEND, 0664

a+ O_RDWR | O_CREAT | O_APPEND, 0664

umask

umask:用来设定文件或目录的初始权限

文件和目录的真正初始权限

文件或目录的初始权限 = 文件或目录的最大默认权限 - nmask(普通用户最大权限是0666,而nmask = 0002,因此实际权限为0664)

文件IO文件的关闭

文件关闭函数是close,用来关闭一个打开的文件

#include

int close(int fd);

成功时返回0;出错时返回EOF

程序结束时,自动关闭所有打开的文件

文件关闭后,文件描述符不再代表文件

文件IO的读写定位

    文件IO-读

read函数用来从文件中读取数据:

#include

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

成功时返回实际读取的字节数;出错时返回EOF

读到文件末尾是返回0

buf是接收数据的缓冲区

count不应超过buf大小

    文件IO-写

write函数用来向文件写入数据

#include

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

成功时返回实际写入的字节数;出错时返回EOF

buf是发送数据的缓冲区

count不应超过buf大小

    文件IO-定位

lseek函数用来定位文件:

#include

off_t lseek(int fd(文件描述符),off_t offset(偏移量,可正可负,不能超2G),intt whence(偏移坐标))

成功时返回当前的文件读写位置;出错时返回EOF;

参数offsst和参数whence同fseek完全一样

SEEK_CUR当前位置偏移

SEEK_END末尾进行偏移

SEEK_SET头部位置进行偏移

你可能感兴趣的:(linux,运维,服务器)