文件编程概述:
(文件原理及访问机制,文件在内核中的管理机制,什么是文件信息节点,文件共享,文件权限,各用户对其权限)罗里吧嗦,对新手不友好,适合会编程后优化深究。
学习用代码管理文件(打开,编辑,保存,关闭)打开open读写read、write光标定位lseek关闭close
文件打开及创建:
文件描述符(file descriptor)文件索引作用
终端man open 查看open函数
open函数返回文件描述符,返回-1代表打开失败,1为文件路径及名称,2为权限(O_RDONLY,O_WRONLY,O_RDWR可选项O_CREAT,O_EXCL,O_APPEND,O_TRUNC)创建时有第三个参数mode,通常为0600,读4写2执行1,文件所有者,同组用户,其他组
EXCL和CREAT一起使用,文件存在时返回-1
TRUNC将文件清空重写
ls -l rwx可读可写可执行
文件写入编程:
<unistd.h>
write( fd, const void *buf , count)
将2中3个字节写入1的文件中,返回写入字节数.错误返回-1
const表明定义变量只有只读特性const int i=5和int const i=5均可
linux下指针长度8个字节
文件写入后必须close关闭,否则会数据错乱。
文件读取操作:
read(fd, buf ,count)
从1中读取3个字节到2中,返回读取字节数。错误返回-1
文件关闭后再打开,光标从头开始。
写入后立马读取读不到内容,光标在最后。
文件光标移动
关闭再打开文件很土
lseek(fd,offset,whence)
3:SEEK_SET,SEEK_CUR,SEEK_END(文件头,当前,文件尾)
将光标移到3偏移2(左负右正),返回光标离文件头位置数。
可计算文件大小。
文件操作原理简述
linux系统默认文件描述符0标准输入1标准输出2标准错误(对内核)
文件描述符只对当前进程有效
文件分为动态文件,静态文件。open静态文件后内核产生结构体将文件内容栽到内存中,read,write都是对动态文件修改,close后再更新静态文件。块设备本身读写不灵活,按块读写,内存是按字节单位操作,随机灵活。
open函数其实是向内核发送指令,内核完成具体打开操作。
文件操作小应用实现cp指令
- 打开a文件
- 读a到buf
- 打开/创建b文件(TRUNC)
- buf写入到b文件
- close两文件
main函数参数(int argc,char** argv)参数个数,argv【1】第一个字符数组
修改程序的配置文件
strstr(str1,str2)
1中找2,返回首字母指针
exit(-1)终止调用当前进程,-1为返回给父进程的状态值。
写一个整数(结构体)到文件
write、read函数不止可以写字符,还可写整数,结构体,vi打开后会显示乱码,但不影响系统对数据的判断
标准c库对文件操作引入
open函数是unix系统调用函数,返回文件描述符,是文件索引。
fopen是c语言库函数,返回指向文件结构体的指针,有良好移植性。
fopen在用户态下有缓冲,内存缓冲区大,则操作外存次数越少,执行速度快,效率高。
标准c库打开文件读写光标移动
r只读 rb只读打开二进制文件
w只写 wb
a追加 ab
r+可读可写打开 rb+
w+可读可写创建 wb+
a+可读可追加打开 ab+
<stdio.h>
<string.h>
FILE *fp=fopen(“./a.txt”, “w+”)
fwrite(str, sizeof(char), strlen(str), fp)
1写入指针起始位置,2为一次写入字节数,3写入次数,4文件描述符
返回值为写入次数(=3)
fread(readbuf, sizeof(char), strlen(str), fp)
返回值为读取次数(可能小于3)
读写结构体的时候2用sizeof(struct test),3为1
fseek(fd,0,SEEK_SET)
fclose(fp)
文件及其他函数讲解
fputc(“a”,fp)
将1写入2所指文件,并将内部写指针自动后移一个字节
feof(fp)
检测流上的文件结束符,文件结束返回0,否则返回非0
fgetc(fp)
从fp指向文件中读取一个字符,并将光标后移一个字节。
Linux一切皆文件。