linux下的文件操作

这一章给出了诸多的文件操作的函数,我把这些函数总结一下

open() creat() close() read() write() lseek() fstat() stat() mmap()   nummap() fcntl()  ioctl()

1.open()

//函数原型	
int open(const char *pathname , int flags);
int open(const char *pathname , int flags , mode_t mode);
//文件描述符 open(路径,方式,权限);

其中flags有:

符号  作用

O_RDONLY 0 打开方式为只读

O_WRONLY 1 打开方式为只写

O_RDWR 2 打开方式为读写

O_CREAT 64 文件不存在,就创建该文件(加上这个后必须填第三个权限位)

O_EXCL 128 查看文件是否存在,如果同时使用了(O_EXCL|O_CREAT)且文件存在,就会open()就会返回-1(文件打开失败)

O_TRUNC 512 打开的同时清空该文件

O_APPEND 1024 写操作时,都写到文件末尾

函数判断标识位的时候是按位判断的,最低位为0,则使用O_RDONLY最低位则使用1则为O_WRONLY。低二位为1则使用O_RDWR,低7位为1则使用O_CREAT...

显然,可以通过位运算   或---> ‘|’  把它们叠加起来。


对于权限位:

这一位只有选择O_CREATf方式打开,才有效。权限位有对应的符号 :

符号 对应文件权限

S_IRWXU 0700 rwx|===|===

S_IRUSR 0400 r==|===|===

S_IWUSR 0200 =w=|===|===

S_IXUSR 0100 ==x|===|===

S_IRWXG 0070 ===|rwx|===

S_IRGRP 0040 ===|r==|===

S_IWGRP 0020 ===|=w=|===

S_IXGRP 0010 ===|==x|===

S_IRWXO 0007 ===|===|rwx

S_IROTH 0004 ===|===|r==

S_IWOTH 0002 ===|===|=w=

S_IXOTH 0001 ===|===|==x

这个也可以用位运算或叠加,不建议用标识符,还是直接填权限,简单又方便。


注:1.路径不能识别自定义变量和环境变量,可以识别 ./ (当前目录)../ (上个目录)

2.文件描述符用于对文件的操作,是一个int型的数,表示当前第几个文件。

3.文件打开失败,open()返回-1.


2.creat()

//函数原型
#inlcude<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int creat(const char *pathname,mode_t mode);
//等同于int open(const char *pathname,O_WRONLY|O_CREAT|O_TRUNC,mode_t mode);
//参照open()吧


3.close()

//函数原型
#include<unistd.h>
int close(int fd);
//(成功结束返回0,否则-1) close(文件描述符)
用于关闭open()打开的文件.



4.read()

<span style="font-size:12px;color:#330033;">//函数原型
#include<unistd.h>
ssize_t read(int fd,void *buf, size_t count);
//成功读取的字节数 read(要操作的文件的描述符,要存放的地址指针,要读取的个数);
//size_t与ssize_t在头文件中被typedef定义
//typedef unsigned int size_t;
//typedef signed int ssize_t;</span>

关于read()的返回值,如果执行失败返回-1;执行成功,返回成功读取的字节数;如果执行函数之前文件已经被读到末尾,返回0.

另外执行read()对应的文件的打开必须要有可读权限。



5.write()

//函数原型
#include<unistd.h>
ssize_t write(int fd,const void *buf, size_t count);
//成功写入的字节数 write(要写入的文件的描述符,要写入的数据的指针,要写入的字节数);


出错返回-1,文件必须可写;


6.lseek()

//函数原型
#include<sys/types.h>
#include<unistd.h>
off_t lseek(int fildes,off_t offset,int whence);
//偏移量 lseek(文件描述符,偏移量,操作模式);
//typedef long int off_t

操作方式:

符号 作用
SEEK_SET 设置偏移量为 0+offset

SEEK_CUR 设置偏移量为 当前位置+offset

SEEK_END 设置偏移量为 文件尾部+offset


如果执行成功返回新文件的偏移量,失败返回-1



7.fstat()


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值