Linux文件

举报
dz小伟 发表于 2022/11/02 12:27:33 2022/11/02
【摘要】 @TOC 1、创建,打开文件 1.1、API1.int open(const char*pathname,int flags)2.int open(const char*pathname,int flags,mode_t mode)3.int creat(const char*pathname,mode_t mode)返回值:文件描述符(确定是哪个文件)(返回一个非负数,-1表示没有此文件)...

@TOC

1、创建,打开文件

1.1、API

1.int open(const char*pathname,int flags)
2.int open(const char*pathname,int flags,mode_t mode)
3.int creat(const char*pathname,mode_t mode)

返回值:文件描述符(确定是哪个文件)(返回一个非负数,-1表示没有此文件)
参数1:文件指针路径+文件名(./文件名)
参数2:打开方式(读O_RDONLY,写O_WRONLY,可读可写O_RDWR)(创建文件要和前面3个与,并且要写第三个参数O_CREAT)
参数3:说明该文件存取许可权限rw(可读可写0600)

1.2、补充

参数3
0:
6: r:4 w:2 x:1
0:同组
0:其他组
参数2:与|
O_CREAT:创建文件,要有参数3的许可权限
O_EXCL:与上面搭配用,如果文件存在则返回-1
O_APPEND:打开文件光标指向文件尾
O_TRUNC:清楚文件内容
3.creac函数
参数1:创建的文件名(/文件名,/绝对路径,./当前路径)
参数2:模式权限
S_IRUSR:可读 4
S_IWUSR:可写 2
S_IXUSR:可执行 1
S_IRWXU:可读可写可执行 7

2、读写文件

2.1、API

1.ssize_t write(int fd,const void* buf,size_t count)
2.ssize_t read(int fd,void* buf,size_t count)

返回值:读写的字节(失败返回-1)
参数1:文件描述符(操作哪个文件)
参数2:写什么进去,指针类型; 读到哪里,指针类型
参数3:写几个字节,用sizeof和strlen算

3、光标

3.1、API

1.off_t lseek(int fd,off_t offset,int whence)

返回值:针对文件头偏移多少字节(光标指向尾,可以返回文件大小)
参数1:文件描述符
参数2:偏移量,0不偏移,负数往前,正往后
参数3:光标移动到位置,SEEK_SET头,SEEK_END尾,SEEK_CUR当前位置
注:一定注意光标位置,读写都会使位置变化

4、操作文件原理

1.UNIX shell使用文件描述符0与进程标准输入结合,1与输出结合,2与错误输出结合
STDIN_FILEND:0
STDOUT_FILEND:1
STDERR_FILEND:2
例:int r=read(0,buf,5)
write(1,buf,strlen®)
2.静态文件和动态文件
静态:硬盘上存储的
动态:从硬盘上读取到内存,linux内核结构体
操作的是内存,也就是动态文件
操作完成后close,动态文件就更新到静态文件里,最终改变静态文件
3.为什么不直接操作静态文件
静态文件是以块存放的,操作不灵活
内存是按字节操作的,可以随机操作很灵活

5、c库函数

FILE*fp
1.fopen,fwrite,fread,fseek,fclose
fwrite参数:写什么指针类型,写多少字节,写多少次,fp
2.写读返回值:写返回写多少次,读返回读了几个字节
fopen返回地址,打开失败返回NULL
fgetc,fputc,feof
写,读,判断是否到文件尾
注:写读一个一个写读用for
feof返回值:没到尾返回0,到尾返回非0

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。