Linux文件编程

88 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情

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(r)) 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