linux文件文件基础

文件IO基础

  • 什么是文件I/O
    • 文件I/O是对文件的输入、输出操作,铜元素点数哦就是对文件的读/写操作

文件描述符:

  • 什么是文件描述符?
    • 一个非负整数,与相应文件相互绑定。
  • 文件描述符如何分配
    • 分配一个没有被使用的最小的非负整数作为文件描述符
    • 一般用户打开的文件是从3开始的
  • 标准输入、标准输出和标准错误
    • 上述三个分别对应:0、1、2

open()函数(系统调用函数)

  • 函数原型:

    int open(const char *pathname,int flags); // 常用于打开文件
    int open(const char *pathname,int flags,mode_t mode); // 常用于创建文件
    
  • 参数描述:

    • pathname:文件路径
    • flags:标志,控制文件访问模式标志
    • mode:给文件赋予权限

flags标志简介

标志用途说明
O_RDONLY以只读方式打开文件这三个是文件访问权限标志,传入的flags 参数中必须要包含其中一种标志,而且只能包含一种,打开的文件只能按照这种权限来操作,譬如使用了 O_RDONLY 标志,就只能对文件进行读取操作,不能写操作
O_WRONLY以只写方式打开文件
O_RDWR以可读可写方式打开文件
O_CREAT如果 pathname 参数指向的文件不存在则创建此文件使用此标志时,调用 open 函数需要传入第 3 个参数 mode,参数 mode 用于指定新建文件的访问权限
O_DIRECTORY如果 pathname 参数指向的不是一个目录,则调用 open 失败
O_EXCL此标志一般结合 O_CREAT 标志一起使用,用于专门创建文件在 flags 参数同时使用到了 O_CREAT 和O_EXCL 标志的情况下,如果 pathname 参数指向的文件已经存在,则 open 函数返回错误如果文件不存在则创建此文件,如果存在则返回错误
O_NOFOLLOW如果 pathname 参数指向的是一个符号链接,将不对其进行解引用,直接返回错误不加此标志情况下,如果 pathname参数是一个符号链接,会对其进行解引用
O_TRUNC若文件存在,则长度被截为0,属性不变
  • 返回值:成功返回文件描述符,失败返回-1

wirte()函数(系统调用函数)

  • 函数原型:

    ssize_t write(int fd,const void *buf,size_t count);
    
  • 参数描述:

    • fd:文件描述符
    • buf:存放要写入的数据
    • count:写入的字节数
  • 返回值:ssize_t (实际类型:long int),返回实际上写入的字节数。

read()函数(系统调用函数)

  • 函数原型:

    ssize_t read(itn fd,void *buf,size_t count);
    
  • 参数描述:

    • fd:文件描述符
    • buf:存放要读取的数据
    • count:一次读入的字节数
  • 返回值:读取到多少字节,返回对应整数

close()函数(系统调用函数)

  • 函数原型:

    int close(int fd);
    
  • 参数描述:

    • fd:文件描述符
  • 返回值:成功返回0,失败返回-1。

练习:

题目1:新建一个test.txt文件,写入"hello World"。对新建文件的要求O、G用户对文件只有可读权限,U用户具有可读、可写权限。读取text.txt内容,并打印出来。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <strings.h>
#include <stdio.h>

int main(){

    // 以新建文件方式打开文件
    int fd = open("test.txt",O_RDWR | O_CREAT | O_EXCL,0644);
    // 调用wirte函数向文件内写入数据
    if(write(fd,"Hello World",11) == -1){
        printf("写入数据出错");
    }
    // 更改文件内容偏移量,从文件头开始读
    lseek(fd,0,SEEK_SET);
    char buf[100];
	// 读取文件内容并输出
    if(read(fd,buf,100) == -1){
        printf("读取失败!");
    }

    printf("buf:%s\n",buf);
    
    // 关闭文件
    close(fd);
    return 0;
}

sleek()函数:

  • 函数原型:

    off_t lseek(int fd,off_t offset,int whence);
    
  • 参数含义:

    • fd:文件描述符
    • offset:偏移量的大小
    • whence:指针偏移的位置

whence参数类型

    • SEEK_SET:读写偏移量将指向 offset 字节位置处(从文件头部开始算)
    • SEEK_CUR:读写偏移量将指向当前位置偏移量 + offset 字节位置处, offset 可以为正、也可以为负,如果是正数表示往后偏移,如果是负数则表示往前偏移
    • SEEK_END:读写偏移量将指向文件末尾 + offset 字节位置处,同样 offset 可以为正、也可以为负
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值