IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 5.Linux基础IO -> 正文阅读

[系统运维]5.Linux基础IO

目录

open

系统调用 和 库函数

重定向

文件管理、理解文件系统

静态库 动态库怎么打包


文件? = 内容 + 属性

FILE*, c语言,软件

如何理解硬件和软件的关系

stdin,标准输入,键盘

stdout,标准输出,显示器

stderr,标准错误,显示器

stdin & stdout & stderr,c语言默认打开三个输出流,标准输入流,标准输出流和标准错误。

Linux之下一切皆文件。

为什么提供三个接口?实现人与计算机的交互(通过语言)。

1.如何输入输出

stdin & stdout & stderr,c语言默认打开三个输出流,标准输入流,标准输出流和标准错误。

系统文件输入输出接口

open

open,有两种使用方式

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

其中pathname: 要打开或创建的目标文件
flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。
参数:
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR : 读,写打开
这三个常量,必须指定一个且只能指定一个
O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限
O_APPEND: 追加写

返回值:
成功:新打开的文件描述符
失败:-1

那如何理解mode_t呢?

和使用权限有关。

const char *str = "hello world\n";

write(fd, str, strlern(str));

close(fd);

系统调用 和 库函数

我们要回顾一下系统调用 和 库函数的概念,知道系统调用是系统提供的接口,而库函数呢?

是为了用户更好的使用对系统调用的二次封装。

其中,fopen fclose fread fwrite 都是C标准库当中的函数,我们称之为库函数(libc)。
而, open close read write lseek 都属于系统提供的接口,称之为系统调用接口。

可以认为f系列函数是对接口的二次封装。

3,4,5,6? ?文件描述符fd(files descration),在os层面就是一个整数,从0到n,

0:标准输入

1:标准输出

2:标准错误

本质是数组下标

os要管理文件,结构体,多个文件多个结构体,链表组织

struct file{

//文件的属性信息

//文件的缓存和存储位置

}

进程是task_struct,进程访问文件,进程对文件 1:n

struct file*fd_array? [结构体指针数组],pcb有指针fs指向其中。(struct file_struct中的)

什么是文件描述符

本质是数组下标,默认从小的分配,默认从3开始

通过结构体和函数指针实现面向对象

重定向

重定向:本来应该输出到显示器上的内容,输出到了文件当中,其中,fd=1。这种现象叫做输出
重定向。常见的重定向有:>, >>, <

我们来看这一代码,我们会发现printf和fprinf打印了两次。

int main()
{
  int fd = open("log.txt",O_CREAT | O_APPEND | O_WEONLY, 0644);
  if(fd < 0){
    perror("open error");
    return 1;
}
  const char *str = "hello world: write\n";
  const char *str1 = "hello world: print\n";
  const char *str2 = "hello world: fprint\n";
  
  write(1,str,strlen(str));
  printf("%s",str1);
  fprintf(stout,"%s",str2);

  fork();

  fflush(stdout);
}

输出地一般有两种,

显示器,行缓冲

和文件,全缓冲

缓冲区,本质是一块内存

重定向,目的地发生变化,收缓冲影响。库函数受影响,缓冲区在库函数提供的。

用户级缓冲区,c标准库提供。(语言给我们提供的缓冲区)

先关闭1的重定向,

不关闭用dup,有dup和dup2,我们在这里学习dup2。

dup2(oldfd,newfd),内容的拷贝

dup2(fd,1)

close(fd)

数组内容的拷贝,内容的改变。

文件管理、理解文件系统

文件? = 内容 + 属性

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?一个文件

(1)inode{

属性集合

}

(n数据块)block{? ? ? ? ? ? ? ? ? 4kb为单位保存的

内容

}

file system{

基本情况

空间一共多大

已经被使用&&没有被使用

inode

block

group(高度概括)

方法

}

理解硬盘,里边是光盘(两面都是光的)6磁头,机械臂杆

盘面,柱面,扇区

硬盘想象成大数组,将对硬盘进行管理的问题转化为对数组进行管理的问题。?

硬盘太大了,划分空间,(用文件系统)便于管理。(分区)

?inode文件的属性? ?(个数是确定的)

Data block 数据

?文件:inode: block = 1:1:n

inode id ,标识一个inode,是唯一的

目录是文件,有inode和block

怎么分配inode id

由i位图决定,多少id就是多少0 ,00000.......00000,比如第五个给了,就是00001......000。

同理b位图

想象为数组

通过位图知道inode和block的使用情况。

删除把1变为0.删除成本低

目录也是文件 = inode + 数据块(文件名 + inode映射关系)

硬链接

不是单独文件。和指向的文件共享一个inode。

是什么呢?

文件名和映射关系

软链接ln -s(本质上就相当于一个快捷方式)

是不是独立文件,是,有独立inode

stat 更多文件信息

静态库 动态库怎么打包

静态库.a? ? ? 静态链接,将对应的代码拷贝进bin,体积比较大,bin可移植性强

链接的时候纳入进来

动态库 .so? ? ?动态库体积小,依赖库? ?运行的时候才加载

libc.so.6? ?根据命名规则,去掉lib和第一个点后边,就是库的名字,所以是c库。

使用需要提供

一批头文件:有什么方法可以使用,接口参数是什么意思

一个,多个库文件:具体的实现,供我们动静态链接

链接的本质:将你代码生成的.o文件进行打包

ar -rc libmypath.a myadd.o mysub.o? ? ? 这一步是将myadd.o mysub.o打包成libmypath.a(打包库文件)

?最后可打包成如图文件进行传输

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 13:11:34  更:2021-10-04 13:11:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:55:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码