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

怎么做校园表白墙网站郑州 网站建设 东区

怎么做校园表白墙网站,郑州 网站建设 东区,郑州网站优化费用,seo免费优化工具目录 一、C语言文件操作 1.1 fopen和fclose 1.2 fwrite和fread 1.3 C语言中的输入输出流 二、Linux的文件系统调用 2.1 open和文件描述符 2.2 close 2.3 read 2.4 write 三、Linux内核数据结构与文件描述符 一、C语言文件操作 在C语言中我们想要打开一个文件并对其进…目录 一、C语言文件操作 1.1 fopen和fclose 1.2 fwrite和fread 1.3 C语言中的输入输出流 二、Linux的文件系统调用 2.1 open和文件描述符 2.2 close 2.3 read 2.4 write 三、Linux内核数据结构与文件描述符 一、C语言文件操作 在C语言中我们想要打开一个文件并对其进行读取写入等各种操作需要依赖于fopen、fread、fwrite等函数。我们先来回顾一下这些函数 1.1 fopen和fclose 其中 path目标文件的路径mode文件的打开模式 文件的打开模式中r表示只读w表示只写a表示追加还有很多模式相信对大家来说都不陌生 fopen如果打开文件成功会返回一个FILE*指针其中FILE结构体是C库自己封装的结构体内部封装了文件的各种属性 一个文件被打开后如果我们不需要使用该文件了就需要使用fclose关闭它向函数传入先前从fopen接收到的FILE*指针即可。 1.2 fwrite和fread 其中 ptr指向某一内存块的指针size要读取/写入的元素大小nmemb要读取/写入的元素个数stream文件指针 所以读取或写入的字节总数为size*nmemb 我们可以用fwrite对一个文件进行写入例如 #include stdio.h #include string.hint main() {FILE *fp fopen(myfile, w);if(!fp){printf(fopen error!\n);}const char *str hello Linux\n;fwrite(str, strlen(str), 1, fp); fclose(fp);return 0; } 运行代码可以看到已经写入成功了 我们还可以用fread读取一个文件的内容例如 #include stdio.h #include unistd.h #include string.hint main() {FILE *fp fopen(myfile, r); if(!fp){printf(fopen error!\n);}char buf[1024];ssize_t s fread(buf, 1, sizeof(buf), fp);if(s){buf[s] \0;printf(%s, buf);}fclose(fp);return 0; }fread如果读取成功会返回读取的元素总数与nmemb个数相同 运行代码可以发现之前写入到myfile文件中的内容已经被读取出来了 除了以上的这些接口C语言还有很多的文件操作接口这里不是重点不作过多赘述 1.3 C语言中的输入输出流 在Linux中一切皆文件显示器也是文件我们也可以对其进行写入操作 如何对其进行写入呢这里介绍C语言中的三个输入输出流 其中stdin是标准输入流对应我们的键盘stdout是标准输出流stderr是标准错误流这两个流对应我们的显示器。这三个输入输出流是C语言程序在启动时默认会给我们打开的 不止是C语言其他语言也会默认打开这三个流不过名称不同。C中分别是cin、cout和cerr  进程将从标准输入流中得到输入数据将正常输出数据输出到标准输出流而将错误信息送到标准错误流中 可以看到这三个流的类型都是FILE*也就是说我们自己也可以通过fread从标准输入流中读取键盘输入的内容通过fwrite向标准输出流或标准错误流即显示器文件写入我们的内容。 #include stdio.h #include unistd.h #include string.hint main() {const char* str hello Linux\n;fwrite(str, 1, strlen(str), stdout);return 0; }运行程序可以看到我们已经把内容写入到显示器文件中了 二、Linux的文件系统调用 在前面了解操作系统的时候就提到操作系统是有自己的系统调用接口的。 而语言中涉及到操作系统内核部分的函数实际上都是封装了操作系统的系统调用接口包括C语言的文件操作接口也是封装了操作系统的文件系统调用接口 所以我们先来了解一下Linux中的文件系统调用接口 2.1 open和文件描述符 open是Linux系统中用来打开文件的一个系统调用接口其中 pathname目标文件的路径flag文件访问权限标志mode如果创建新文件指定新建文件的访问权限 flag参数是文件访问权限标志位其中 O_RDONLY以只读方式打开文件O_WRONLY以只写方式打开文件O_RDWR以可读可写方式打开文件 我们在使用open函数时必须包含以上三种中的一种标志位除了这些还有其他的可选标志位这里列出常用的三种 O_CREAT如果pathname指向的文件不存在则创建文件O_TRUNC打开文件的同时清空文件O_APPEND以追加方式对文件进行写入 标志位可以通过位运算的方式同时选中多种例如 像上面这样就是以只写方式打开文件、以追加方式写入、如果文件不存在则创建 其中如果选中了O_CREAT一般都要对mode参数进行设置该参数用来设置新创建的文件权限 关于文件权限我在前面的文章中有讲过 【Linux】常用指令、热键与权限管理-CSDN博客https://blog.csdn.net/Eristic0618/article/details/138795212?spm1001.2014.3001.5501接下来我们看看open函数的返回值 可以看到成功打开文件后open函数会返回一个file descriptor即所谓的文件描述符fd 文件描述符是一个整型从0开始向后分配系统在给文件分配文件描述符时会分配当前没有被使用的最小的文件描述符  关于文件描述符的本质在后面会详细提到目前只需要知道进程是通过文件描述符来访问文件的 2.2 close close是Linux系统中关闭文件的系统调用接口其参数就是一个文件描述符传入文件对应的文件描述符即可关闭该文件 2.3 read read函数将从fd对应的文件中读取count个字节到buf指向的内存块中 成功则返回读取到的字节数失败则返回-1若调用read时文件已达末尾则返回0 2.4 write write函数将把buf指向的内存块中的内容写入count个字节到fd对应的文件中 成功则返回写入的字节数失败则返回-1 三、Linux内核数据结构与文件描述符 到这里相信大家已经学会如何使用Linux中的文件系统调用接口了接下来我们深入探讨一下访问文件的本质 一个文件由内容和属性两部分构成没打开的文件存储在磁盘中本文重点不在于未打开的文件所以不作过多探讨。而我们如果要打开一个文件就先得将其加载到内存中这是由冯·诺依曼体系结构决定的。 所以在操作系统内部一定存在着大量的被打开的文件操作系统也自然要对这些文件进行管理即先描述再组织。操作系统内部使用file结构体与C语言的FILE结构体不同来描述一个被打开文件的信息其中包括该文件的基本属性、权限、大小、内核缓冲区信息等等将这些结构体用数据结构组织起来就可以完成对被打开文件的管理了。 而一个进程可以同时打开多个文件所以进程和文件是一对多的关系。要把一个进程打开的所有文件管理起来我们就要使用一个files_struct结构体。 我们知道操作系统通过PCB描述进程而在进程的PCB中就有这么一个类型为 struct files_struct* 的指针files指向了进程的files_struct结构体其定义如下 struct files_struct {atomic_t count;struct fdtable *fdt;struct fdtable fdtab;int next_fd;struct embedded_fd_set close_on_exec_init;struct embedded_fd_set open_fds_init;struct file * fd_array[NR_OPEN_DEFAULT]; };其中的fd_array数组就指向了进程打开的一个个文件的file结构体。很多人称files_struct是文件描述符表但我认为这个fd_array数组才是更准确的文件描述符表因为所谓的文件描述符其实就是文件在这个表中存储位置的下标 前面提到程序在启动时会默认打开三个标准输入输出流所以文件描述符表中的前三个位置是默认被使用的。对应的标准输入流的文件描述符为0标准输出流的文件描述符为1标准错误流的文件描述符为2 如何验证在C语言中文件的属性被封装在FILE结构体中结构体中的_fileno就是文件的文件描述符我们只需要把三个标准流的文件描述符打印出来就能验证了 int main() {printf(stdin:%d\n, stdin-_fileno);printf(stdout:%d\n, stdout-_fileno);printf(stderr:%d\n, stderr-_fileno); return 0; }可以看到三个标准流对应的文件描述符就是0、1、2 如果此时我们在打印前close(1)会发生什么呢 int main() {close(1);printf(stdin:%d\n, stdin-_fileno);printf(stdout:%d\n, stdout-_fileno);printf(stderr:%d\n, stderr-_fileno); return 0; }什么也不会打印因为标准输出流即显示器文件在打印前已经被关闭了 我们可以在程序中打开多个文件看看它们的文件描述符是什么 int main() {int fd1 open(file1, O_WRONLY|O_TRUNC|O_CREAT, 0666);int fd2 open(file2, O_WRONLY|O_TRUNC|O_CREAT, 0666);int fd3 open(file3, O_WRONLY|O_TRUNC|O_CREAT, 0666);int fd4 open(file4, O_WRONLY|O_TRUNC|O_CREAT, 0666);printf(fd1:%d\n, fd1);printf(fd2:%d\n, fd2);printf(fd3:%d\n, fd3);printf(fd4:%d\n, fd4); return 0; } 可以看到系统会给文件分配当前未被使用的最小的文件描述符 一个文件可以被多个进程打开那么是不是一个进程将该文件关闭了该文件对应的资源就要被系统回收呢 不是的在file结构体中有该文件的引用计数用来计算该文件被多少个进程打开了。如果一个进程将该文件对应的fd关闭则减少对应的引用计数只有当引用计数为0时文件才会被真正的关闭 完.
文章转载自:
http://www.morning.bftr.cn.gov.cn.bftr.cn
http://www.morning.dmldp.cn.gov.cn.dmldp.cn
http://www.morning.ljpqy.cn.gov.cn.ljpqy.cn
http://www.morning.kfbth.cn.gov.cn.kfbth.cn
http://www.morning.xirfr.cn.gov.cn.xirfr.cn
http://www.morning.tqhpt.cn.gov.cn.tqhpt.cn
http://www.morning.tldfp.cn.gov.cn.tldfp.cn
http://www.morning.bpmns.cn.gov.cn.bpmns.cn
http://www.morning.gjqwt.cn.gov.cn.gjqwt.cn
http://www.morning.bnlch.cn.gov.cn.bnlch.cn
http://www.morning.ytbr.cn.gov.cn.ytbr.cn
http://www.morning.grbp.cn.gov.cn.grbp.cn
http://www.morning.pqnkg.cn.gov.cn.pqnkg.cn
http://www.morning.ydgzj.cn.gov.cn.ydgzj.cn
http://www.morning.ydhck.cn.gov.cn.ydhck.cn
http://www.morning.wwgpy.cn.gov.cn.wwgpy.cn
http://www.morning.cjmmn.cn.gov.cn.cjmmn.cn
http://www.morning.mcbqq.cn.gov.cn.mcbqq.cn
http://www.morning.phzrq.cn.gov.cn.phzrq.cn
http://www.morning.nynyj.cn.gov.cn.nynyj.cn
http://www.morning.nxhjg.cn.gov.cn.nxhjg.cn
http://www.morning.lfpdc.cn.gov.cn.lfpdc.cn
http://www.morning.dwmtk.cn.gov.cn.dwmtk.cn
http://www.morning.dyght.cn.gov.cn.dyght.cn
http://www.morning.rfzzw.com.gov.cn.rfzzw.com
http://www.morning.gtnyq.cn.gov.cn.gtnyq.cn
http://www.morning.yrnyz.cn.gov.cn.yrnyz.cn
http://www.morning.bktzr.cn.gov.cn.bktzr.cn
http://www.morning.prsxj.cn.gov.cn.prsxj.cn
http://www.morning.ykrck.cn.gov.cn.ykrck.cn
http://www.morning.bftr.cn.gov.cn.bftr.cn
http://www.morning.pzlhq.cn.gov.cn.pzlhq.cn
http://www.morning.pcqxr.cn.gov.cn.pcqxr.cn
http://www.morning.cpmwg.cn.gov.cn.cpmwg.cn
http://www.morning.jjhrj.cn.gov.cn.jjhrj.cn
http://www.morning.tlfzp.cn.gov.cn.tlfzp.cn
http://www.morning.wdlyt.cn.gov.cn.wdlyt.cn
http://www.morning.tdcql.cn.gov.cn.tdcql.cn
http://www.morning.bpttm.cn.gov.cn.bpttm.cn
http://www.morning.phxdc.cn.gov.cn.phxdc.cn
http://www.morning.yhyqg.cn.gov.cn.yhyqg.cn
http://www.morning.yfmwg.cn.gov.cn.yfmwg.cn
http://www.morning.hdrsr.cn.gov.cn.hdrsr.cn
http://www.morning.rxlck.cn.gov.cn.rxlck.cn
http://www.morning.khpgd.cn.gov.cn.khpgd.cn
http://www.morning.jnptt.cn.gov.cn.jnptt.cn
http://www.morning.xgmf.cn.gov.cn.xgmf.cn
http://www.morning.gfprf.cn.gov.cn.gfprf.cn
http://www.morning.ymjgx.cn.gov.cn.ymjgx.cn
http://www.morning.fhsgw.cn.gov.cn.fhsgw.cn
http://www.morning.xtrnx.cn.gov.cn.xtrnx.cn
http://www.morning.byzpl.cn.gov.cn.byzpl.cn
http://www.morning.gqflj.cn.gov.cn.gqflj.cn
http://www.morning.tthmg.cn.gov.cn.tthmg.cn
http://www.morning.mrkbz.cn.gov.cn.mrkbz.cn
http://www.morning.lgnz.cn.gov.cn.lgnz.cn
http://www.morning.glnfn.cn.gov.cn.glnfn.cn
http://www.morning.lokext.com.gov.cn.lokext.com
http://www.morning.kgltb.cn.gov.cn.kgltb.cn
http://www.morning.qmwzz.cn.gov.cn.qmwzz.cn
http://www.morning.kflpf.cn.gov.cn.kflpf.cn
http://www.morning.rjcqb.cn.gov.cn.rjcqb.cn
http://www.morning.wrtbx.cn.gov.cn.wrtbx.cn
http://www.morning.fhxrb.cn.gov.cn.fhxrb.cn
http://www.morning.qttft.cn.gov.cn.qttft.cn
http://www.morning.cnhgc.cn.gov.cn.cnhgc.cn
http://www.morning.kfclh.cn.gov.cn.kfclh.cn
http://www.morning.fbccx.cn.gov.cn.fbccx.cn
http://www.morning.pwsnr.cn.gov.cn.pwsnr.cn
http://www.morning.ldqrd.cn.gov.cn.ldqrd.cn
http://www.morning.sgwr.cn.gov.cn.sgwr.cn
http://www.morning.mxbks.cn.gov.cn.mxbks.cn
http://www.morning.fksxs.cn.gov.cn.fksxs.cn
http://www.morning.qpnmd.cn.gov.cn.qpnmd.cn
http://www.morning.xdjsx.cn.gov.cn.xdjsx.cn
http://www.morning.tgyqq.cn.gov.cn.tgyqq.cn
http://www.morning.kqbzy.cn.gov.cn.kqbzy.cn
http://www.morning.rwhlf.cn.gov.cn.rwhlf.cn
http://www.morning.tjwlp.cn.gov.cn.tjwlp.cn
http://www.morning.nyqb.cn.gov.cn.nyqb.cn
http://www.tj-hxxt.cn/news/239696.html

相关文章:

  • 深圳的网站建设公司价格国土局网站建设制度
  • 个人网站建设与管理工作总结如何比较网站
  • 百度权重5的网站能卖多少钱永久持续更新
  • 新东阳建设集团网站如何登录网站空间
  • 深圳有实力的网站建设服务商创建wordpress小工具
  • 百度首页网站推广多少钱一年企点官网下载安装
  • 小九自助建站导游是什么
  • dw网站制作北京响应式的网站设计
  • 做游戏的网站有哪些内容网站流量分析系统
  • 公司企业建站做自己的网站的好处
  • 微商网站做自媒体在哪个网站好
  • 男女做爰全过程网站建设银行青海省分行招聘网站
  • 免费网站软件免费下载安装百姓网推广一年多少钱
  • 深圳东门地铁站叫什么天河门户网
  • 凡科建站的优势电子商务网站的建设流程
  • 迈肯奇迹做网站渠道查官网
  • 专业手表网站深圳开发公司网站建设比较好的
  • 现在的网站开发用什么技术长扬科技北京有限公司
  • 网站推广方法素材淄博做网站推广哪家好
  • 网站在哪里找建设网站制作
  • 高端网站建设报价郑州做网站哪家好熊掌号
  • 网站开发的后期维护网站开发音乐
  • 如何学做网站优化wordpress判断登录用户为vip
  • 哪个公司做网站好苏州网站群建设 实现了
  • 视频网站自己怎么做网络营销的网站建设报告
  • 个人怎么做网站施工合同
  • 织梦电子行业网站模板龙岗网站建设报价
  • 百度网站是怎么做的wordpress 手机 登陆不了
  • 低价自适应网站建设优化建站一个成功的网站必须具备哪几个要素
  • 网站建站管理青岛网络推广方案服务