概念引入
window ,linux如何修改一个文件,比如写一个word文档:
打开/创建文件 -->编辑文件 -->保存文件 -->关闭文件
我们需要使用代码自动化完成以上操作:
操作系统(linux)给我们提供了一系列的API:
打开: open
读写: read/write
光标定位: lseek
关闭: close
===========================================
文件描述符:
也就是文件的索引, 对于内核而言,所有文件都由文件描述符引用。 文件描述符是一个非负整数。
打开/创建文件-- 返回文件描述符
读写文件需要文件描述符作为参数传递
注意: 文件描述符的作用域是当前进程 ,出了这个进程文件,描述符没有任何意义
linux 系统默认文件描述符:
0 -- >标准输入(也就是键盘) 1-->标准输出 2 -->标准错误, so我们open文件的时候返回的fd从3开始
0 1 2对应的宏分别为: STDIN_FILENO STDOUT_FILENO STDERR_FILENO
------------------
编程应用:
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>int main()
{
char readBuf[128];
read(0,readBuf,5);
write(1,readBuf,strlen(readBuf));
puts("");
return 0;
}
--------------------------------
注意: 使用完文件后,要close() 关闭,防止文件损坏
存在磁盘中的文件 -- 静态文件
open 静态文件 后,在linux 内核产生结构体,来存放fd,buf(内存)等数据 -- 这时候就是动态文件
调用close() -- 会把缓冲区buf的所有东西写入磁盘中
// 为什么需要动态文件:磁盘的最小读取单位就是一个块。属于块设备
快设别十分的不灵活,是快读写,而内存是按字节单位操作的,而且可以随机操作,很灵活
打开/创建文件:
打开文件open()
返回值 --文件描述符,起到索引作用
需要头文件:
<sys/types.h><sys/stat.h> <fcntl.h>
函数原型
int open(const char*pathname,int flags);
int open(const char*pathname,int flags,mode_t mode);
pathname --要打开的的文件路径,可省略--当前路径
flags 打开方式:O_RDONLY 只读打开 O_WRONLY 只写打开 O_RDWR 可读可写
以上常数只能指定一个 ,但是以下常数可选择:
flags|后续常数:
O_CREAT -- 若文件不存在就创建他
O_EXCK 如果同时指定了O_CRATE,文件已经存在,则返回值为-1 --> 判断文件是否存在
O_APPEND -- 从文件的末尾写入数据 -- 如果不加 append 的话,原来的内容可能会被覆盖
O_TRUNC 属性去打开文件时,if这个文件是有内容的,而且为只读or只写成功打开。则将其长度截短为0
--意识就是清空文件,然后重写写入内容mode: 文件权限:
常用 权限:
1.可读 r --4
2.可写 w --2
3.执行:x --1
比如6: 4+2 rw_0600 -- 给文件所有者读写权限
-------------------------------------------------------
为了简化表达,我们还可以采取数字表示代替ugo,二进制0~7代表三种权限:
把rwx记为421 : r-4 w-2 x-1
0:无任何权限 000 ---
1: 只有x权限 000 --x
2:只有w权限 010 -w-
3:011 -wx
4:100 r--
5: 101 r-x
6: 110 rw-
7:全部权限:111 rwx
————————————————
文件权限详细理解和操作,建议移步 3 linux

最低0.47元/天 解锁文章
590

被折叠的 条评论
为什么被折叠?



