linux文件系统
来源:互联网 发布:nginx lua 连接redis 编辑:程序博客网 时间:2024/06/07 17:38
linux中体现了“一切皆文件”的思想,所以Linux中文件就显得尤为重要。
一、文件的创建
int creat(const char* pathname, mode_t mode)第一个参数就不说了,大家都懂的,mode指的是新建文件的存取权限,它和umask一起决定文件最终权限。至于mode都有哪些权限,一会说。
二、文件打开
int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);
flags是一种文件打开的方式,它可以是一个值或几个值的组合,下面是一些文件常用的文件标:
标志
含义
O_RDONLY
只读的方式打开
O_WRONLY
只写的方式打开
O_RDWR
读写的方式打开
O_APPEND
追加的方式打开
O_CREAT
创建一个文件
O_EXEC
使用了O_CREAT而且文件已经存在,就会放生一个错误
O_NOBLOCK
非阻塞的方式打开
O_TRUNC
如果文件已经存在,删除文件内容
使用上面这些标志,我们就可以以不同的方式来打开它,而且也能创建文件,列如:int open(const char *pathname, O_CREAT | O_TRUNC, mode);使用上面我们就可以创建一个文件,和creat差不多。
下面我们来看一些常用的文件访问权限(mode):
假如我们创建一个用户可读、可写、可以执行,没有组权限,其他人可以读、不可以写、可以执行,并且设置用户ID,如图
通过上面的分析,我们来创建一个文件
open("test", O_CREAT | O_TRUNC, 10705)等价于
open("test", O_CREAT | O_TRUNC, S_ISUID | S_IRWXU | S_IROTH | S_IXOTH);
三、读和写
文件打开之后,我们要进行读和写,Linux中提供的读写函数:
int read(int fd, const void *buf, size_t length);int write(int fd, const void *buf, size_t length);buf 是缓冲区的指针,length为缓冲区大小(以字节为大小),read函数就是文件描述符fd所指定的文件中length个字节读取到buf所指向的缓冲区,返回实际读取的字节数。write函数就是把buf所指向的缓冲区中length个字节写到文件描述符fd所指定的文件中,返回实际写入的字节数。
四、定位
随机指定位置进行读写,Linux提供的函数:
int lseek(int fd, offset_t offeset, int whence);lseek函数将文件读写指针相对于whence位置移动offeset个字节,成功,返回指针相对于文件头的位置。
参数whence可以使用下面参数:
SEEK_SET:相对文件开头
SEEK_CUR:相对文件读写指针的当前位置
SEEK_END:相对文件末尾
举个列子:
lseek(fd, -3, SEEK_CUR);将文件指针相对当前位置向前移动3个字节。
切记:lseek函数返回值是文件头的位置
列如:
lseek(fd, 0, SEEK_END);上面这个函数返回的就是文件的长度。
五、关闭
如果我们要关闭文件,只要调用close就行,函数如下:
int close(int fd);这个比较简单,想必大家都知道,就不说了
我给大家举一个简单列子:
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> int main() { //write file int fd; fd = open("t.txt", O_CREAT | O_TRUNC | O_RDWR, S_ISUID |S_IRWXU); if(fd < 0) { return 1; } char buf[] = "hello world!"; ssize_t size = 0; size = write(fd, buf, strlen(buf)); if(size < 0) { return 2; } printf("write Successful!\n"); close(fd); //read file , output to the screen fd = open("t.txt",O_RDWR); if(fd < 0) { return 0; } size = read(fd, buf, sizeof(buf)); if(size < 0) { return 3; } buf[size] = '\0'; printf("%s\n",buf); close(fd); return 0; }这是我对文件系统的一些理解,希望能帮到大家!
0 0
- Linux文件系统
- linux文件系统
- Linux文件系统
- Linux文件系统
- linux 文件系统
- LINUX 文件系统
- Linux文件系统
- linux文件系统
- Linux文件系统
- Linux 文件系统
- Linux 文件系统
- linux 文件系统
- linux 文件系统
- Linux文件系统
- Linux文件系统
- linux文件系统
- Linux 文件系统
- linux文件系统
- 正则匹配字母、数字与字符组成的字符串
- NS安装 NS2.35 Ubuntu16.04
- UGUI研究院之有效解决RaycastTarget勾选过多的烦恼(二十三)
- RHEL 6.x 搭建rsyslog日志服务器和loganalyzer 日志分析工具
- MFC 线程编程
- linux文件系统
- Lottie Android 初探
- Marketer 渠道打包工具,可视化打包工具,快速打包工具
- 归并排序java实现
- 移动端下拉刷新、上拉异步加载的插件以及轮播图插件
- 有关数据库操作的知识总结
- maven常用命令介绍
- TodoMVC-Angular版本
- zip4j -- Java处理zip压缩文件的完整解决方案