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

免费做初中试卷的网站手机怎么设计平面图片

免费做初中试卷的网站,手机怎么设计平面图片,asp和php的建站区别,软件制作助手一、文件的理解 每种语言都有进行文件操作的函数接口#xff0c;例如C语言的fopen、fwrite、fprintf等等#xff0c;但是进行文件操作的前提是代码已经跑起来#xff0c;因为文件的打开与关闭要通过CPU来运行程序代码#xff0c;所以打开文件的本质是进程打开文件#xff…一、文件的理解 每种语言都有进行文件操作的函数接口例如C语言的fopen、fwrite、fprintf等等但是进行文件操作的前提是代码已经跑起来因为文件的打开与关闭要通过CPU来运行程序代码所以打开文件的本质是进程打开文件文件操作也是进程进行文件操作。 既然文件的打开与关闭是依靠进程的而操作系统中避免不了存在许多进程那么一定有大量打开的文件所以OS就需要将这些文件管理起来先描述在组织所以在OS内部每一个被打开的文件应该有一个专门描述文件的结构类似于PCB 文件没有被打开的时候是在哪里呢 ------解释 文件没有被打开的时候是存在磁盘中的而磁盘属于硬件用户要进行文件操作是不可以直接访问硬件的因为操作系统不相信任何人用户只能通过操作系统的函数调用来进行文件操作而我们在平常一般使用的是语言层面的文件函数接口不同语言对于文件的函数调用却是有差异的但它们都是对系统调用接口的封装。 二、文件系统调用接口介绍 1. 打开文件open #include sys/types.h#include sys/stat.h#include fcntl.h//一般用于打开已存在的文件int open(const char *pathname, int flags);//一般用来打开并创建新的文件int open(const char *pathname, int flags, mode_t mode);pathname: 要打开或创建的目标文件flags: 打开文件时可以传入多个参数选项用下面的一个或者多个常量进行 “或” 运算构成flags。mode给新创建的文件设置权限flag参数: O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR : 读写打开这三个常量必须指定一个且只能指定一个O_CREAT : 若文件不存在则创建它。需要使用mode选项来指明新文件的访问权限O_APPEND: 追加写O_TRUNC 如果文件存在再次以写方式打开清空文件 2. 关闭文件close #include unistd.hint close(int fd); 3. write #include unistd.hssize_t write(int fd, const void *buf, size_t count);4. read #include unistd.hssize_t read(int fd, void *buf, size_t count);代码演示 以写的方式打开文件若文件不存在则创建文件再次向文件写入向后追加 #includestdio.h#includesys/types.h#includesys/stat.h#includefcntl.h#includeunistd.h#includestring.hint main(){int fdopen(log.txt,O_WRONLY|O_CREAT|O_TRUNC,0666);const char* bufhello Linux file!; write(fd,buf,strlen(buf));close(fd);return 0;}5. 如何理解open中的标记选项 在日常写程序时我们想创建一个标记一般会直接定义 int flag 如果需要两个则定义 int flag1 、int flag2 若需要多个标记的话这样写不仅难以维护而且有点浪费空间。 做标记无非就是要表达有或没有、是或不是的信息一个整形变量有32个比特位 每个比特位都单独可以做为标记位这是OS设计系统调用的常用方式。接下来我们自己模拟实现一个位图的函数理解一下 #includestdio.h#define ONE (1) //1#define TWO (11) //2#define THREE (12) //4#define FOUR (13) //8void print(int flag){if(flagONE)printf(one\n); //替换成其他功能if(flagTWO)printf(two\n);if(flagTHREE)printf(three\n);if(flagFOUR)printf(four\n);}int main(){print(ONE);printf(\n);print(TWO);printf(\n);print(ONE|TWO);printf(\n);print(ONE|TWO|THREE);printf(\n);return 0; }三.理解open返回值文件描述符 为什么fd是从3开始的呢0、1、2去哪里了呢 --- 0标准输入流键盘 --- 1标准输出流显示器 --- 2标准错误流显示器 这三个流在程序启动时就自动开启了 Linux下万物皆文件操作系统将这三个标准也视为文件所以文件创建时是从3开始的 既然0、1就可代表键盘与显示器那向显示器打印信息除了printf还可以这样做 为什么一个整数就可以代表一个文件呢文件描述符的本质是什么 ---- 上面说过操作系统需要将打开的文件进行管理区分哪些文件被打开了哪些文件马上就要关闭等等信息在Linux下每一个打开的文件都会被struct file的结构体所描述为了便于管理会将这些结构体用双链表进行连接管理这个结构体中还存在一个指针表示文件内核级的缓冲区想要读取磁盘的文件中内容只需将内容放入该缓冲区程序就可以使用这些内容了同理若想要向磁盘中的文件写入内容需要将内容先写入缓冲区再讲缓冲区的内容导入文件这样对文件管理只需要对文件的struct file进行管理了 对文件管理的实质是进程对文件进行管理那进程是如何管理自己文件的呢 进程在创建时会创建自己的PCB一个进程可以打开多个文件为了区分这些文件具体是哪些进程管理的每个进程的PCB中存在着一个struct files_struct* 的指针这个指针用来管理进程打开的文件为了进程与文件的对应关系struct files_struct结构体中保存着struct file* [ ]的指针数组既然是数组一定会有数组下标则操作系统会将0号下标指针指向保存标准输入的struct file的地址,将1号下标指针指向保存标准输出的struct file的地址将2号下标指针指向保存标准错误的struct file的地址同理将3号下标指针指向自己打开的文件struct file的地址 综上所述 # 文件操作符的本质就是文件映射关系数组的下标所以一个整数就可以访问一个文件 # open过程的操作 1.创建file 2.开辟文件缓冲区传输文件数据延后 3.查询文件描述符表构建映射关系 4.返回下标 四.理解Linux下万物皆文件 在上文中我们谈到操作系统将键盘与显示器等也看做文件但是他们本身为硬件该怎么理解万物皆文件呢在Linux下是怎么做到的 对于设备其实我们关心的数据就两个属性与操作方法对于属性一个结构体就可以描述而方法的话不同设备的方法一定是不同的但是可以把他们的参数与返回值设置的类型相同。 操作系统在打开一个设备时就会创建其对应的struct file该结构体除了一些关于文件信息的内容还会存在一些函数指针来实指向对应设备的方法struct file结构体中一定还有一个指针指向设备的属性可以让我们访问到所以想要访问一个设备只需要找到其对应的struct file通过内部函数指针或者指向描述属性结构体的指针就可以操作这个设备。在Linux下一套叫做vfs虚拟文件系统 所以在上层看来不论是磁盘级的文件还是设备级的文件不做区分只将他们看做struct file实现了万物皆文件 五、重新理解不同语言对文件操作的封装 上文解释到在Linux操作系统下进程是依靠文件描述符来操控文件的但是C语言中对于文件操作的函数却使用的是FILE*的指针连stdout、stdin、stderr也是FILE*类型的其实FILE是一个结构体封装了对于文件信息的描述其内部也一定包含了文件描述符。 #includestdio.h #includesys/types.h #includesys/stat.h #includefcntl.h #includeunistd.h #includestring.h int main() { FILE* fpfopen(log.txt,w); if(fpNULL) {perror(fopen);return 1;}printf(stdin:%d\n,stdin-_fileno);printf(stdout:%d\n,stdout-_fileno); printf(stderr:%d\n,stderr-_fileno); printf(fp:%d\n,fp-_fileno); return 0; } 语言的文件操作函数本质底层都是对系统调用的封装 那C语言为什么要这样做呢 因为C语言其他语言也是这样想实现跨平台性不同操作系统的系统调用是不同的仅使用系统调用的代码不具有跨平台性所以语言会对系统调用进行封装在哪个操作系统下就使用该操作系统的系统调用这样就可以实现语言的跨平台性。
http://www.zqtcl.cn/news/564076/

相关文章:

  • php网站开发实例教程书wordpress博客页面显示文章在哪
  • 地方o2o同城网站源码微信app开发价格表
  • 花木公司网站源码双语外贸网站源码
  • 什么公司做网站会提供源代码创业做招商加盟类网站赚钱
  • 东莞网站建设排名基因数据库网站开发价格
  • 天河区营销型网站建设科技自立自强
  • 网站域名账号江苏百度推广代理商
  • 专题网站建站对网站分析
  • 外贸出口网站建设如何搭建自己的网站服务器
  • 云南省建设厅网站职称评审房地产推广方案和推广思路
  • 湘潭建设路街道网站app的设计与开发
  • 《网站开发实践》 实训报告广告策划书案例完整版
  • 一级 爰做片免费网站做中学学中做网站
  • 网站排名如何提升网络营销的有哪些特点
  • 巨腾外贸网站建设个人主页网站模板免费
  • 有哪些网站免费做推广淄博网站电子商城平台建设
  • 网站建设的技术支持论文做网站买什么品牌笔记本好
  • 凡科网站后台在哪里.工程与建设
  • 静态网站源文件下载建设手机网站价格
  • 苏州做网站优化的网站开发邮件
  • 做网站怎么搭建环境阿里云大学 网站建设
  • 网站改版业务嵌入式培训推荐
  • 腾讯云 怎样建设网站网站开发 报价
  • 网络科技公司门户网站免费人脉推广官方软件
  • 建和做网站网络营销推广可以理解为
  • 太原市网站建设网站人防工程做资料的网站
  • 怎么做免费推广网站做网站第一部
  • 橙色网站后台模板WordPress的SEO插件安装失败
  • 做网站好还是做微信小程序好外包加工网外放加工活
  • 中国建设银行网站查征信电子商务网站建设及推广