Linux系统提供了一些常用API如:
打开/创建 open/creat
读写 write /read
光标定位 Iseek
关闭 close
1.打开文件
参数说明
Pathname:要打开的文件名 (含路径,缺省为当前路径)
Flags:
O_RDONLY 只读打开 O_WRONLY:只写打开 O_RDWR 可读可写打开
当我们附带了权限后,打开的文件就只能按照这种权限来操作。
以上这三个常数中应当只指定一个。下列常数是可选择的:
O_CREAT 若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限
O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。
O_APPEND 每次写时都加到文件的尾端。
O_TRUNC 属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开,则将其长度截短为0。
Mode:一定是在flags中使用了O_CREAT标志,mode记录待创建的文件的访问权限
2.创建文件
3.写入文件
4.读取文件
5.光标定位
lseek():移动文件的光标,通常用lseek(fd,0,SEEK_END)获取文件长度
原型:int lseek(int fd, off_t offset, int whence);
返回值:调用成功返回光标偏移字节,调用失败返回-1
参数:
fd:文件描述符
off_t offset:偏移字节,0为不偏移,-a为往前偏移a个字节,b为往前偏移b个字节
int whence:光标位置
6.关闭文件
7.文件编程一般步骤
1、在Linux中要操作一个文件,一般是先open打开一个文件,得到文件描述符,然后对文件进行读写操作(或其他操作),最后是close关闭文件即可。
2、强调一点:我们对文件进行操作时,一定要先打开文件,打开成功之后才能操作,如果打开失败,就不用进行后边的操作了,最后读写完成后,一定要关闭文件,否则会造成文件损坏。
3、文件平时是存放在块设备中的文件系统文件中的,我们把这种文件叫静态文件,当我们去open打开一个文件时,linux内核做的操作包括:内核在进程建立一个打开文件的数据结构,记录下我们打开的这个文件;内核在内存中申请一段内存,并且将静态文件的内容从块设备中读取到内核中特定地址管理存放(叫动态文件)。
4、打开文件以后,以后对这个文件的读写提作,都是针对内存中的这一份动态文件的,而并不是针对静态文件的。当然我们对动态文件进行读写以后,此时内存中动态文件和块设备文件中的静态文件就不同步了,当我们close关闭动态文件时,close内部内核将内存中的动态文件的内容去更新(同步)块设备中的静态文件
5、为什么这么设计,不直接对块设备直接操作?
因为块设备本身读写非常不灵活,是按块读写的,而内存是按字节单位操作的,而且可以随机操作,很灵活。