【Linux】——文件操作函数

文件操作函数头文件有以下几个:

# include<sys/types.h>

# include<sys/stat.h>

# include<fcntl.h>

(1)int open(const char *filename,int flag,int mode); //打开文件

返回值:<0,表示出错了;>=0,表示文件描述符(fd),在read,write,close,lseek函数中使用。

filename:打开的文件名(如果只给文件名,只会去当前目录下搜索,如果要打开一个指定的文件,就要给出它的路径)

flag:打开的方式(只读:O_RDONLY、只写:O_WRONLY、读写:O_RDWR、追加:O_APPEND,创建:O_CREAT)

注意:如果文件存在,那么加了这个选项就没有什么效果,因为有它就不会再去新建。如果打开的文件不存在,我设置了这个参数,那我就会去创建一个新的文件,如果没有这个参数,那就会打开失败,给我们报错,一般返回的都是-1。

mode:这个参数是个可选项,只有在flag为O_CREAT时才会用到。它的作用是创建文件时,指定文件的权限,权限用nnnn表示,一般第一个n都为0。

(2)int read(int fd,void *buf,size_t size);  //读文件

fd:读取的文件,由open的返回值指定

buf:存储缓冲区,就是从文件读到的数据存放的位置

size:指定一次最多读取的字节个数,一般情况下是缓冲区的大小(可以小于缓冲区的大小,不能大于缓冲区的大小,因为比缓冲区大存储时就会越界)。

返回值:出错返回-1;成功返回读到的数据字节数

(3)int write(int fd,void *buf,size_t size);  //写文件

返回值:出错返回-1;成功返回写入的数据的长度(字节)

注意:如果写入到一半出错了,就会将已经写入成功的数据字节数返回

fd:写入的对象(open打开的文件)

buf:写入的数据的起始位置

size:写入数据的长度(按字节计算)

例如:char buff[128]="hello world";

           write(fd,buff,strlen(buff));

(4)int close(int fd);   //关闭打开的文件

fd:指定文件描述符

返回值:成功返回0;失败返回-1

(5)int lseek(int fd,int size,int flag);   //移动读写偏移量,相当于c语言中的读写游标,就是类似于有这么一个指针来记录当前操作的位置,比如:这个值前面的都是操作过的,这个值后面的都是未操作的。

fd:操作的文件

size:移动的大小(字节)

flag:移动标记,移动的起始位置:SEEK_SET(文件的开头),SEEK_CUR(文件的当前位置),SEEK_END(文件的结尾)

(6) int stat(const char *filename, struct stat *buf);  //通过文件名filename获取文件信息,并保存在buf所指的结构体stat中

          int fstat(int fd,struct stat *buf);  //fstat 通过文件描述符获取文件对应的属性。文件打开后这样操作

          int lstat(const char *filename,struct stat *buf);  //连接文件

返回值:执行成功则返回0,失败返回-1

给定一个pathname,stat函数返回一个与此命名文件有关的信息结构,fstat函数获得已在描述符filedes上打开的文件的有关信息。lstat函数类似于stat,但是当命名的文件是一个符号连接时,lstat返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息。

文件对应的属性:

struct stat {
        mode_t     st_mode;       //文件对应的模式,文件,目录等
        ino_t      st_ino;        //inode节点号
        dev_t      st_dev;        //设备号码
        dev_t      st_rdev;       //特殊设备号码
        nlink_t    st_nlink;      //文件的连接数
        uid_t      st_uid;        //文件所有者
        gid_t      st_gid;        //文件所有者对应的组
        off_t      st_size;       //普通文件,对应的文件字节数
        time_t     st_atime;      //文件最后被访问的时间
        time_t     st_mtime;      //文件内容最后被修改的时间
        time_t     st_ctime;      //文件状态改变时间
        blksize_t st_blksize;     //文件内容对应的块大小
        blkcnt_t   st_blocks;     //文件内容对应的块数量
};

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值