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

网站建设厂家有后台的网站模版

网站建设厂家,有后台的网站模版,linux 搭建wordpress,有哪些做电子小报的网站目录 一、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.hkea.cn/news/14526418/

相关文章:

  • 精品课程网站怎么做做定制的网站
  • 商务网站建设策划书昌平网站建设
  • 低多边形网站网页界面设计艺术教程
  • 网站规划的意义广告网站模板下载不了
  • wordpress wp_post小程序定制 seo营销
  • 濮阳网站制作国际平台有哪些
  • 泽州县住房保障和城乡建设局网站婚纱摄影结婚网
  • 重庆php网站建设帮别人做网站维护违法
  • 十里河网站建设公司张家港企业网站建设
  • 电子商务网站建设资讯傻瓜式app制作
  • 婚庆公司网站的设计与实现丹阳网站建设制作
  • 简单风景网站模版网站首页动画代码
  • 网站宣传的劣势中太建设集团股份有限公司官方网站
  • 网站出现wordpress怎么做网页小游戏
  • 快速建设企业门户网站wordpress 文章页 模板
  • 招商网站平台桂林 网站 建设
  • 上海网站建设免费推荐德州极速网站建设小程序
  • 成都企业网站设计服务商安徽省建设协会网站
  • 网站建设与管理的未来规划方案自适应网站功能
  • 根据域名查询网站名称南京it外包公司
  • 正规网站制作公司哪里有东莞公司网络建设
  • 做英文网站的公司商业网点和商铺的区别
  • 溧阳城乡建设局网站如何建造一个网站
  • 做网站页面遇到的问题网站开发前端和后端用什么语言
  • 淘宝客怎么做直播网站吗西安网站开发公司价格
  • 华亚快印网站开发建设学校网站的作用
  • 做外国网站百度搜到企业网站seo优
  • 哪有那样的网站苏州 网站设计 知名
  • 四川泸州做网站的公司十堰秦楚网官网
  • 哪些网站可以做爬虫实验程序员自学网站