当前位置: 首页 > news >正文

网页设计与网站建设作业答案淘宝宝贝关键词排名查询工具

网页设计与网站建设作业答案,淘宝宝贝关键词排名查询工具,网站运营面试,wordpress主机需要多大文件描述符就是从0开始的小整数。当我们打开文件时,操作系统在内存中要创建相应的数据结构来 描述目标文件。于是就有了file结构体。表示一个已经打开的文件对象。而进程执行open系统调用,所以必须让进程和文件关联起来。每个进程都有一个指针*files, 指…

        文件描述符就是从0开始的小整数。当我们打开文件时,操作系统在内存中要创建相应的数据结构来 描述目标文件。于是就有了file结构体。表示一个已经打开的文件对象。而进程执行open系统调用,所以必须让进程和文件关联起来。每个进程都有一个指针*files, 指向一张表files_struct,该表最重要的部分就是包涵一个指针数组,每个元素都是一个指向打开文件的指针!

        文件描述符就是该数组的下标。所以,只要拿着文件 描述符,就可以找到对应的文件

原来我在博客中也提过,linux下一切皆文件, 如何理解呢?

linux下一切皆文件

        硬盘 , 网卡, 键盘,显示器等外设都是文件?

  • 一切皆文件" 是 Linux 的核心设计哲学,在进程角度, 将系统中的各种资源抽象为文件

  • 通过统一的文件接口,可以方便地访问和操作硬件设备、进程信息、网络套接字等资源。

VFS 虚拟文件系统 (多态)

  • 统一都有struct file ,上层都以 struct file 形式访问
  • 将不同设备用相同的结构体 struct file 管理起来,从进程角度(上层) ,就是一切皆文件

如何用结构体统一管理呢? 尤其是不同设备的调用方法不同

        因为linux是C语言写的,也就是struct file 中不能包含成员函数 , 所以linux在struct file中 ,使用了函数指针 , 对应了该设备的具体调用函数.

        用函数指针屏蔽了底层的差异 , 读写网卡 /键盘等 , 上层就不关心具体方法了.

        

        系统调用(sysem call)在内部就直接调用 ,对应的函数指针  例如: 

     int fd1 = open("open.txt" , O_RDWR|O_CREAT , 0666);if(fd1 < 0){perror("open");return 1;}const char* message ="hello linux\n";write(fd1, message, strlen(message));在文件open.txt中写入write(1,message ,strlen(message));  在屏幕上写入close(fd1);

        这两种写入, write通过文件描述符(fd)找到对应的 struct file 调用对应的函数指针即可,并不关心是向磁盘中写入 ,还是向显示屏中写入.

struct file中的一个指针指向 函数指针表

I/O的基本过程

1.文件的内核缓冲区

内核缓冲区存在的意义:

        外设的io操作太慢了,为了提高io效率,每个文件都有一个内核缓冲区.

文件的系统调用本质:

  • 写入 write: 将数据从用户拷贝到 文件的内核缓冲区.(先不刷新到对应的磁盘文件)
  • 读入 read: 将磁盘文件加载到 文件的内核缓冲区,再拷贝给用户.

文件的struct file 中包含 文件的内核缓冲区的指针

2.重定向

文件描述符的分配规则

        文件描述符的分配规则:在files_struct数组当中,找到当前没有被使用的最小的一个下标,作为新的文件描述符。

include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>int main()
{close(1);int fd = open("myfile", O_WRONLY|O_CREAT, 00644);if(fd < 0){perror("open");return 1;}printf("fd: %d\n", fd);fflush(stdout);close(fd);exit(0);
}

        我们发现,本来应该输出到显示器上的内容,输出到了文件 myfile 当中,其中,fd=1。这种现象叫做输出 重定向。

        常见的重定向有:>, >>, <

那重定向的本质是什么呢?

        我们原来讲过   从上层看, 文件描述符(fd)是 访问硬件的唯一方式

        printf是C库当中的IO函数,一般往 stdout 中输出,但是stdout底层访问文件的时候,找的还是fd:1, 但此时,fd:1 下标所表示内容,已经变成了myfile的地址,不再是显示器文件的地址,所以,输出的任何消息都会往文件中写 入,进而完成输出重定向。

输出重定向

dup2让newfd成为oldfd的拷贝,此时两个file* 都指向 同一个struct file ,会发生引用计数.

dup2(fd ,1) 

重定向和追加重定向

两者打开文件open函数的flags不同

  •         重定向的flags: O_CREAT | O_WRONLY
  •         追加重定向的flags:O_CREAT | O_WRONLY |O_APPEND

http://www.dtcms.com/a/581169.html

相关文章:

  • 2025年CSP-X复赛真题及题解(山东):T2IOI串
  • 基于网易CodeWave智能开发平台构建宝可梦图鉴
  • Ubuntu2204降内核版本
  • 数据在网络上的转发过程
  • 跨地域传文件太麻烦?Nginx+cpolar 让本地服务直接公网访问
  • ASP.NET MVC 数据验证进阶:用 IValidatableObject 实现自定义验证逻辑 引言:为什么需要 “自定义验证”?
  • 网站流量报表摄像头怎么做直播网站
  • XMOS与飞腾云联袂以模块化方案大幅加速音频产品落地
  • AI 下的 Agent 技术全览
  • 唐山免费网站制作wordpress企业cms开发
  • Windows 里用 Linux 不卡顿?WSL + cpolar让跨系统开发变简单
  • Java 全栈 Devs【应用】:用Spring Boot、MinIO 实现文件上传存储,结合 OnlyOffice 实现文件预览
  • 优化SEO表现的方法:有效利用关键词和长尾关键词的策略
  • 协同感知:未来智能系统的“神经中枢”与跨域融合引擎
  • 做淘宝客网站的流程4399网页版入口
  • 氛围编程走远,规格驱动开发降临
  • 硅基计划6.0 JavaEE 叁 文件IO
  • python+django/flask的篮球馆/足球场地/运动场地预约系统
  • 网站做零售node.js网站开发框架
  • AUTOSAR Adaptive Platform ——Platform Health Management (PHM)
  • 云空间网站qq刷赞网站如何做分站
  • 【技术教程】Python/Node.js 调用拼多多商品详情 API 示例详解
  • 微软加速在亚洲扩展云基础设施,推动区域数字化跨越式发展
  • 八股已死、场景当立(场景篇-分布式ID)
  • LeetCode 刷题【147. 对链表进行插入排序】
  • XMSRC4194_VC1:4通道192KHz ASRC音频采样率转换器产品介绍
  • 2025.11.06 力扣每日一题
  • Linux入门攻坚——53、drbd - Distribute Replicated Block Device,分布式复制块设备-2
  • 视频文件上传至服务器后浏览器无法在线播放
  • 鹤壁市建设工程交易中心网站魔改wordpress主题