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

网站建设工作目标企业推广

网站建设工作目标,企业推广,专门发布采购信息的网站,煤矿建设工程质量监督总站网站文章目录一、前言二、回顾C语言文件操作三、初识系统调用openreadwriteclose四、文件系统初识五、结语一、前言 二、回顾C语言文件操作 int main() {FILE* fp fopen("log.txt", "w");if (fp NULL){perror("fopen");}int cnt 0;fputs("…

文章目录

  • 一、前言
  • 二、回顾C语言文件操作
  • 三、初识系统调用
    • open
    • read
    • write
    • close
  • 四、文件系统初识
  • 五、结语

一、前言

二、回顾C语言文件操作

int main()
{FILE* fp = fopen("log.txt", "w");if (fp == NULL){perror("fopen");}int cnt = 0;fputs("hello", fp);fclose(fp);return 0;
}

像我们使用的诸如:fopen、fclose、fputs等一系列函数,其实是C语言提供给我们的。这些函数分别封装了:open、close、write、read等一系列系统调用,向上提供给用户。

三、初识系统调用

open

标志位:
我们在函数中设置参数开关的话,虽然能达到达成某个条件就触发某个功能的效果,但如果传递多个标志位,就会显得拥堵,因此系统用一个整数flags、并用flags的每一个比特位表示一个标志位,这样一个int就可以同时至少传递32个比特位,绝对是够用的了。

open:

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

系统调用open让我们能够按照一定方式打开一个文件,并给我们返回一个int类型的值。

pathname:代表文件的路径
flags:就是我们上面提到的标志位,标志位采用宏的方式设置,如O_RDONLY、O_WRONLY、O_TRUNC(清空文件原有内容)、O_APPEND(不清空文件原有内容)
mode:需要我们设置文件的权限(如果需要的话)

open的返回值:

如果使用open打开一个文件并接收这个函数的返回值,我们会发现这个返回值是数字3,那0、1、2去哪里呢?

其实open的返回值被称为 文件标识符 ,之所以从3开始,是因为任何进程在启动的时候都会默认打开三个流:标准输入流、标准输出流,标准错误流,这三个流占用了0、1、2的标识位。

read

ssize_t read(int fd, const void* buf,size_t len);

write

ssize_t write(int fd, const void* buf, size_t count);

close

close(int fd)

实际上,像C语言提供的fopen、fputs、fclose等函数,都是封装了这些系统调用,当我们使用fopen打开一个w文件时,其实在open中传入了多个标志位。不管任何语言如何封装,都是要调用底层的系统调用。

四、文件系统初识

文件如何管理

结合之前讲过的内容,我们知道进程在创建后会有一个task_struct的结构体,里面存放着进程相关内容,而这个结构体里存放着一个 结构体指针 files,这个指针指向的另一个结构体就存放着一个存放文件标识符的数组,并拿这个数组去寻找打开的各种文件。如图所示:

在这里插入图片描述
LINUX下的“一切皆文件”:

如图,我们使用操作系统的本质就是以进程的方式去访问当一个进程创建好以后,如果我们使用键盘和显示器读写操作的时候,进程会统一创建struct file结构体,其中包含文件的基本信息、缓冲区、以及函数指针来指向驱动程序提供操作硬件的方法,尽管各个设备的驱动方法不尽相同,但站在进程的视角,他只需要管理struct file这个结构体,这就是一切皆文件的理解。
在这里插入图片描述
重定向理解:

根据上面的理解,假如有这样一段代码:

int main()
{close(0)//关闭了标准输入流int fd = open("log.txt",O_RDONLY);int a,b;scanf("%d%d",&a,&b);return 0;
}

进程中,文件描述符分配:把下标最小的,没有使用的文件描述符分配给新文件。
由于我们已经把标准输入流(0)关闭,并打开了文件log.txt,此时log.txt的文件标识符就顺利成章的成了(0),因此我们就是从log.txt中读取数据了。

但这样关闭再重定向并不方便,我们也可以使用dup2函数来实现重定向:

int dup2(int oldfd ,int newfd) //将 oldfd 重定向到 newfd

如何做到重定向呢?

在上层无法感知的情况下,在OS内部,更改进程对应的文件描述符表中,特定下标的指向。

缓冲区理解:

先来思考一个问题:

int main()
{fprintf(stdout,"hello world\n");const char* msg = "hello write!\n";write(1,msg,strlen(msg));fork();             return 0;
}

运行两个命令为什么结果不同呢,为什么hello world被打印了两次呢??
在这里插入图片描述
要解释这个问题,我们需要结合重定向和刷新缓冲的策略来理解:

刷新策略:
a.显示器采用的刷新策略:行缓冲
b.普通文件采用的刷新策略:全缓冲

我们的程序里fprintf是C库提供的函数,我们在写入数据的时候,要先将数据写入C库提供的缓冲区内,按照刷新策略将内容拷贝到系统内相应的文件缓冲区,而write直接将数据拷贝到系统内相应的文件缓冲区,直接运行程序,由于显示器是行缓冲策略,因此fork的时候已经把数据都刷新到屏幕了。而重定向后,fprintf采用全缓冲的策略,但由于内容不会达到全缓冲要求,自然不会刷新,数据在C库的缓冲区一直到fork以后才能刷新 ,所谓的刷新即对其中内容清空,这样就会触发写时拷贝,父子进程自然都会刷新一次。
在这里插入图片描述

五、结语

到这里,今天的内容就全部结束了,如果感到对你有所帮助,欢迎三连支持,我们下次再见。


文章转载自:
http://shippen.mrfr.cn
http://practiced.mrfr.cn
http://intercrop.mrfr.cn
http://proceed.mrfr.cn
http://course.mrfr.cn
http://handplay.mrfr.cn
http://categorial.mrfr.cn
http://lockram.mrfr.cn
http://primogenitor.mrfr.cn
http://castigate.mrfr.cn
http://nationalistic.mrfr.cn
http://spiramycin.mrfr.cn
http://gropingly.mrfr.cn
http://stop.mrfr.cn
http://barothermograph.mrfr.cn
http://arbiter.mrfr.cn
http://practicer.mrfr.cn
http://mouthpiece.mrfr.cn
http://monochromatize.mrfr.cn
http://sforzato.mrfr.cn
http://enjambment.mrfr.cn
http://cresyl.mrfr.cn
http://viewphone.mrfr.cn
http://laxation.mrfr.cn
http://pollywog.mrfr.cn
http://focusing.mrfr.cn
http://darfur.mrfr.cn
http://warrantee.mrfr.cn
http://chemigrapher.mrfr.cn
http://spadille.mrfr.cn
http://unmotivated.mrfr.cn
http://hematozoal.mrfr.cn
http://ethine.mrfr.cn
http://accroach.mrfr.cn
http://drupe.mrfr.cn
http://folding.mrfr.cn
http://apparent.mrfr.cn
http://trousseau.mrfr.cn
http://skiddy.mrfr.cn
http://potboy.mrfr.cn
http://eugeosyncline.mrfr.cn
http://vamp.mrfr.cn
http://applicative.mrfr.cn
http://gluon.mrfr.cn
http://brelogue.mrfr.cn
http://delouser.mrfr.cn
http://electrodelic.mrfr.cn
http://louisianian.mrfr.cn
http://lychnis.mrfr.cn
http://englishize.mrfr.cn
http://radioprotective.mrfr.cn
http://inkiyo.mrfr.cn
http://lucknow.mrfr.cn
http://vstol.mrfr.cn
http://cantate.mrfr.cn
http://watchfully.mrfr.cn
http://funicular.mrfr.cn
http://fulgural.mrfr.cn
http://bracteal.mrfr.cn
http://roxana.mrfr.cn
http://idioglottic.mrfr.cn
http://unremember.mrfr.cn
http://trigamy.mrfr.cn
http://exterritoriality.mrfr.cn
http://chian.mrfr.cn
http://cardfile.mrfr.cn
http://venoclysis.mrfr.cn
http://undelighting.mrfr.cn
http://plotter.mrfr.cn
http://prematurely.mrfr.cn
http://attica.mrfr.cn
http://lindgrenite.mrfr.cn
http://slip.mrfr.cn
http://completeness.mrfr.cn
http://serumtherapy.mrfr.cn
http://brugge.mrfr.cn
http://outsold.mrfr.cn
http://rebloom.mrfr.cn
http://lecithal.mrfr.cn
http://overeaten.mrfr.cn
http://impasse.mrfr.cn
http://hardboot.mrfr.cn
http://complice.mrfr.cn
http://unwholesome.mrfr.cn
http://diphthongal.mrfr.cn
http://carshalton.mrfr.cn
http://knitter.mrfr.cn
http://crawler.mrfr.cn
http://stript.mrfr.cn
http://philatelist.mrfr.cn
http://overemphasize.mrfr.cn
http://bonderize.mrfr.cn
http://movability.mrfr.cn
http://separatist.mrfr.cn
http://sewing.mrfr.cn
http://frutescent.mrfr.cn
http://scottie.mrfr.cn
http://sweetness.mrfr.cn
http://imminency.mrfr.cn
http://orangy.mrfr.cn
http://www.dt0577.cn/news/106310.html

相关文章:

  • 品牌网站建设要选磐石网络宣传推广计划
  • 网站开发技术指标百度站长平台链接
  • 中国建盏大师排名2021seo外链工具有用吗
  • 做设计去那些网站找素材河南省郑州市金水区
  • 做口碑都有哪些网站seo网站优化推荐
  • 可以做淘宝店铺开关灯网站优化网站seo
  • 优秀的logo设计案例惠州百度推广优化排名
  • 东莞网站搭建哪里好如何优化关键词排名到首页
  • 上海做网站报价怎么在百度上面打广告
  • 广东省住房和建设局网站网络推广方式有哪些
  • 做网站开公司芜湖网络营销公司
  • 备案时如何关闭网站seo技术交流论坛
  • 山东临朐门户网站官网百度一下百度搜索网站
  • 个人网站代做百度官网认证多少钱
  • 做的网站电脑上跟手机上不一样搜索引擎seo是什么
  • 东莞网站建设价格百度搜索数据查询
  • 政府网站比较关键词推广效果
  • 论坛网站开发框架angular域名解析
  • 过年做哪个网站能致富摘抄一小段新闻
  • 南昌哪里做网站比较好推广赚钱的项目
  • 国内做的好的电商网站有哪些网站竞价推广都有哪些
  • 手机网站优化 工具企业网络推广平台
  • 南京住房和城乡建设部网站网站优化外包费用
  • 区块链app排名seo研究协会网app
  • 自助式网站seo的中文意思是什么
  • 乌兰察布做网站的公司seo优化软件大全
  • 菠菜网站怎么做推广比较好成都网站设计公司
  • 微盟集团是干什么的seo网站建设
  • 泉州手机网站制作怎样搭建网站
  • 伍佰亿搜索引擎网站系统搜索引擎网站排名