系统调用接口:
open("./mytest.tst", O_WRONLY|O_CREAT,0644)
open函数的返回值 返回的是fd 文件描述符号 , linux 默认打开的文件描述符号是 0 1 2 他们分别是 stdin stdout stderr 他们对应的物理设备是键盘 显示器 显示器
文件描述符的分配的规则是 找到当前没有被使用的最小的数组的一个下标;
如果一个文件没有被打开 那么这个文件在哪里呢 在磁盘上 那么该文件要不要占用磁盘空间呢 必须占用,文件有属性 属性也是数据 磁盘文件=文件内容+文件属性
刷新策略:::::
用户->OS
1.立即刷新 不缓冲
2.行刷新 比如显示器打印
3.缓冲区满了 才刷新(全刷新) 比如往磁盘文件输入
如果我们在运行重定向后 比如 fdtest > log.txt 这个时候 只有hello 可以写进log.txt 如果想要全部写进去 需要加入 fflush(stdout)刷新一下缓冲区。。
目录: 目录是文件 有数据 数据块里面放文件名和inode编号
软连接 是有自己独立的inode的 软链接是一个独立文件 有自己的inode属性 也有自己的数据块(保存的是指向文件的所在路径+文件名)
硬链接本质是根本就不是一个独立的文件 而是一个文件名于与inode编号的映射关系 因为自己没有独立的inode
补充输入重定向、
这个我们一开始关闭键盘文件,然后创建一个log.txt 的新文件 这个时候 它的fd肯定为0 我们将 stdin 输入到line 里面 这个时候 0 对应的是普通文件 这样就完成了输入的重定向
dup 作用 在 文件描述表里的内容 需要重定向的时候
dup
dup2 ::dup2(fd,1) 将本来应该显示到显示器的内容 显示到新的fd里面 完成输出重定向
打开文件默认是不清空的 如果我们想要请客 就需要 O_TRUNC;