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