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

公司后台网站怎么做宁波易企网做的网站

公司后台网站怎么做,宁波易企网做的网站,平台设计思路怎么写,如何上传安装wordpress目录 1. stdin stdout stderr 2. 系统文件I/O 1. 接口介绍 open write read close lseek 2. open函数返回值 3. 文件描述符fd 0 1 2 文件描述符的分配规则 重回定向 dup2 简易Shell的模拟实现 4. FILE 5. 再谈对文件的理解 1. stdin …  目录 1. stdin stdout stderr 2. 系统文件I/O  1. 接口介绍 open write read close lseek 2. open函数返回值 3. 文件描述符fd 0 1 2 文件描述符的分配规则 重回定向 dup2 简易Shell的模拟实现 4. FILE  5. 再谈对文件的理解  1. stdin stdout stderr a: C语言默认会打开三个输入输出流分别是stdin, stdout, stderr stdin标准输入流通常用于从键盘接收输入其类型是 FILE*。stdout标准输出流通常用于向屏幕输出文本其类型也是 FILE*。stderr标准错误流用于输出错误信息同样也是 FILE* 类型。 b: 仔细观察发现这三个流的类型都是FILE*, fopen返回值类型文件指针 FILE* fopen(const char *filename, const char *mode); 第一个参数 filename 是要打开的文件的名称。第二个参数 mode 指定文件打开的模式如 r 表示只读w 表示写入并覆盖现有内容等。 fopen 成功时返回一个 FILE* 类型的非空指针失败时返回 NULL。这里要注意的是虽然 stdin、stdout 和 stderr 的类型都是 FILE*但它们不是通过 fopen 函数获得的而是 C 语言运行时环境自动提供的。 文件指针 FILE* 是 C 语言标准 I/O 库中用于指向文件结构的指针该结构包含了进行文件操作所需的所有信息如文件位置指示器、文件状态标志等。当你使用 fopen 打开一个文件时返回的 FILE* 指针指向这样一个结构它允许你通过标准 I/O 函数如 fread、fwrite、fprintf 等对文件进行操作。 2. 系统文件I/O  操作文件除了上述C接口我们还可以采用系统接口来进行文件访问。 1. 接口介绍 这些操作都很简单需要的时候在命令行 man 一下 open #include sys/types.h #include sys/stat.h #include fcntl.hint open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);pathname: 要打开或创建的目标文件 flags: 打开文件时可以传入多个参数选项用下面的一个或者多个常量进行“或”运算构成flags。参数:O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR : 读写打开这三个常量必须指定一个且只能指定一个O_CREAT : 若文件不存在则创建它。需要使用mode选项来指明新文件的访问权限O_APPEND: 追加写返回值成功新打开的文件描述符失败-1 write ssize_t write(int fd, const void *buf, size_t count); 参数int fd文件描述符这是一个整数代表要写入数据的文件或其他 I/O 设备。对于标准输入、输出和错误流文件描述符分别为 0stdin、1stdout和 2stderr。const void *buf指向要写入的数据缓冲区的指针。buf 参数是一个 const void* 类型的指针意味着它可以指向任何类型的数据。数据的实际类型应与 write 被调用的上下文匹配。size_t count要写入的字节数。count 参数指定了从 buf 指向的缓冲区中写入多少字节的数据到文件描述符 fd。返回值write 函数的返回值表示成功写入的字节数。在成功的情况下返回值应该等于 count。如果发生错误函数返回 -1 并设置 errno 以指示错误类型。 read ssize_t read(int fd, void *buf, size_t count); 参数:int fd文件描述符这是一个表示要读取数据的文件、套接字或其他 I/O 设备的整数。例如标准输入stdin的文件描述符是 0。void *buf指向一个缓冲区的指针用于存储从文件描述符 fd 读取的数据。buf 参数是一个 void* 类型的指针这意味着它可以指向任何类型的数据缓冲区。调用者应确保提供足够大的缓冲区来存储预期数量的数据。size_t count要读取的字节数。count 参数指定了从文件描述符 fd 读取的最大字节数。返回值read 函数的返回值表示成功读取的字节数如果返回值为 0则表示到达了文件末尾EOF。如果发生错误函数返回 -1 并设置全局变量 errno 以指示错误类型。 close #include unistd.hint close(int fd);功能说明close 函数用于关闭一个由 fd 参数指定的文件描述符。文件描述符通常与打开的文件、套接字或其他 I/O 设备相关联。参数int fd要关闭的文件描述符的整数标识符。返回值成功时返回 0。失败时返回 -1并设置 errno 以指示错误。 lseek #include sys/types.h #include unistd.hoff_t lseek(int fd, off_t offset, int whence);功能说明lseek 函数用于重新定位指定文件描述符 fd 的文件读取/写入偏移量。参数int fd文件描述符是一个整数表示要操作的文件或 I/O 设备。off_t offset要设置的偏移量。这个值的含义取决于 whence 参数。int whence指定 offset 参数如何被解释SEEK_SET文件开头offset 是文件开头的绝对偏移量。SEEK_CUR当前位置offset 是相对于当前文件位置的偏移量。SEEK_END文件末尾offset 是相对于文件末尾的偏移量通常用于设置文件指针到文件末尾之后。返回值成功时lseek 返回新的文件偏移量即从文件开头到当前位置的字节数。失败时返回 (off_t)-1并且 errno 被设置为表示错误原因的值。错误代码EBADF指定的文件描述符 fd 无效。EINVALwhence 参数的值无效。EOVERFLOW新的文件偏移量超出了 off_t 类型可以表示的范围描述lseek 函数允许程序修改文件的内部偏移量该偏移量决定了下一次读取或写入操作的起始点。如果 lseek 成功执行文件的当前偏移量将被更新为指定的新位置。对于某些类型的文件如某些管道或设备文件lseek 可能不会产生预期的效果或可能失败。注意lseek 通常用于基于文件偏移量进行操作的文件 I/O 模式。对于不支持随机访问的 I/O 设备lseek 可能无法改变偏移量或者可能总是返回 0。 2. open函数返回值 先来认识一下两个概念: 系统调用 和 库函数。上面的 fopen fclose fread fwrite 都是C标准库当中的函数我们称之为库函数libc。而 open close read write lseek 都属于系统提供的接口称之为系统调用接口。 3. 文件描述符fd 文件描述符就是Unix和类Unix操作系统中用于表示打开文件或其他I/O资源的整数。 0 1 2 Linux进程默认情况下会有3个缺省打开的文件描述符 分别是标准输入0 标准输出1 标准错误2. 0,1,2对应的物理设备一般是键盘显示器显示器 所以输入输出还可以采用如下方式 文件描述符就是从0开始的小整数。当我们打开文件时操作系统在内存中要创建相应的数据结构来描述目标文件。于是就有了file结构体。表示一个已经打开的文件对象。而进程执行open系统调用所以必须让进程和文件关联起来。每个进程都有一个指针*files, 指向一张表files_struct,该表最重要的部分就是包涵一个指针数组每个元素都是一个指向打开文件的指针所以本质上文件描述符就是该数组的下标。所以只要拿着文件描述符就可以找到对应的文件 文件描述符的分配规则 文件描述符的分配规则在files_struct数组当中找到当前没有被使用的最小的一个下标作为新的文件描述符。 重回定向 有了对 文件描述符的分配规则 的认识我们来看一段代码 #include stdio.h #includeunistd.h #include sys/types.h #include sys/stat.h #include fcntl.h #include stdlib.h int main() {::close(1);int fd open(./myfile.txt, O_WRONLY | O_CREAT, 00644);if (fd 0){perror(open);return 1;}printf(fd: %d\n, fd);fflush(stdout);::close(fd);exit(0); } 此时我们发现本来应该输出到显示器上的内容输出到了文件 myfile 当中。这种现象叫做输出重定向。 常见重定向 1大于符号 - 强制输出重定向 将命令的输出重定向到一个文件中。如果该文件已存在其原有内容将被覆盖。例如ls file.txt 将 ls 命令的输出保存到 file.txt 文件中。2双大于符号 - 追加输出重定向 将命令的输出追加到现有文件的末尾而不是覆盖文件。例如echo Hello file.txt 会在 file.txt 文件的末尾追加字符串 Hello。3小于符号 - 输入重定向 将文件内容作为命令的输入。这常用于从文件中读取数据然后将其传递给命令。例如cat file.txt 会读取 file.txt 文件的内容并显示在终端上。42标准错误重定向 将错误输出重定向到指定的文件。这允许你将错误消息保存到文件中而不是显示在终端上。例如./your_program 2 error.log 将程序的错误输出保存到 error.log 文件中。5输出和错误输出重定向 同时将标准输出和标准错误输出都重定向到同一个文件。例如./your_program full_output.log 将所有输出保存到 full_output.log。6|管道符 - 管道重定向 管道不是重定向操作符但它与重定向一起使用可以将一个命令的输出作为另一个命令的输入。例如ls | grep txt 会列出所有以 .txt 结尾的文件。7*星号和 ?问号 - 通配符 星号可以匹配任意数量的字符而问号可以匹配单个字符。它们通常用于文件名的模式匹配。例如rm *.txt 删除当前目录下所有扩展名为 .txt 的文件。 dup2 #include unistd.hint dup2(int oldfd, int newfd);参数int oldfd要复制的旧文件描述符。int newfd复制到的新文件描述符。返回值成功时返回新的文件描述符newfd。失败时返回 -1 并设置 errno 以指示错误。错误代码EBADFoldfd 或 newfd 是一个无效的文件描述符。EINVALnewfd 是一个保留的文件描述符编号。描述dup2 函数通常用于改变一个文件描述符的值或者将一个文件描述符的作用扩展到另一个文件描述符。如果 newfd 是一个已经打开的文件描述符调用 dup2 会导致 newfd 关闭并丢弃其关联的文件状态然后 newfd 被设置为与 oldfd 相同。dup2 可用于重定向标准 I/O 流如 stdin、stdout、stderr。 直接看代码感受感受  #include stdio.h #include unistd.h #include fcntl.h int main() {int fd ::open(./log.txt, O_CREAT | O_RDWR);if (fd 0){perror(open);return 1;}::close(1);::dup2(fd, 1);for (;;){char buf[1024] {0};ssize_t read_size ::read(0, buf, sizeof(buf) - 1);if (read_size 0){perror(read);break;}printf(%s, buf);fflush(stdout);}return 0; } 简易Shell的模拟实现 http://t.csdnimg.cn/lecBdhttp://t.csdnimg.cn/lecBd 4. FILE  a因为IO相关函数与系统调用接口对应并且库函数封装系统调用所以本质上访问文件都是通过fd访问的。 b所以C库当中的FILE结构体内部必定封装了fd。 来段代码来感受一下这些接口都有什么区别 直接执行 重定向./test ./file 为什么会是这个结果 我们发现 printf 和 fwrite 库函数都输出了2次而 write 只输出了一次系统调用。为什么呢肯定和fork有关 一般C库函数写入文件时是全缓冲的而写入显示器是行缓冲。 printf fwrite 库函数会自带缓冲区当发生重定向到普通文件时数据的缓冲方式由行缓冲变成了全缓冲。 而我们放在缓冲区中的数据就不会被立即刷新甚至fork之后 但是进程退出之后会统一刷新写入文件当中。 但是fork的时候父子数据会发生写时拷贝所以当你父进程准备刷新的时候子进程也就有了同样的一份数据随即产生两份数据。 write 没有变化说明没有所谓的缓冲。 综上 printf fwrite 库函数会自带缓冲区而 write 系统调用没有带缓冲区。另外我们这里所说的缓冲区都是用户级缓冲区。其实为了提升整机性能OS也会提供相关内核级缓冲区不过不再我们讨论范围之内。 那这个缓冲区谁提供呢 printf fwrite 是库函数 write 是系统调用库函数在系统调用的“上层” 是对系统调用的“封装”但是 write 没有缓冲区而 printf fwrite 有足以说明该缓冲区是二次加上的又因为是C所以由C标准库提供。 5. 再谈对文件的理解  我们要对文件进行操作前提是我们的程序先要跑起来。文件的打开和关闭其实是CPU在执行我们的代码。什么是文件 文件 内容该目录里的所有文件信息详细数据 属性http://t.csdnimg.cn/k8Ngthttp://t.csdnimg.cn/k8Ngt A打开文件本质是进程打开文件。 B文件没有被打开的时候在哪里存在磁盘里。 C进程能到打开很多文件吗能fd就是组织文件数组的下标 D文件 - 磁盘 - 外设 - 硬件 - 向文件中写入本质向硬件中写入 - 用户没有权利直接写入 - OS是硬件的管理者 - 通过OS写入 -OS必须给我们提供系统调用 - fopen/fwrite/fread/fprintf/scanf/printf/cin/cout... - 我们用的C/C/... 其实都是对系通过调用接口的封装 Eopen的过程。write、read函数本质是拷贝函数 F为什么 fd: 0、1、2 默认是打开的 键盘、鼠标、显示器、都是硬件啊 Linux下一切皆文件 在Linux和Unix系统中一切皆文件的概念是一个核心哲学意味着系统资源、硬件设备和常规文件都可以统一地用文件描述符来访问。文件描述符fd是一个抽象的概念用于表示打开的文件或其他输入/输出资源。 EC语言或者其他语言为什么要将系统调用进行封装 系统调用不具有跨平台性由于系统不同系统调用的接口可能就不一样所有的语言都要对不同的平台的系统调用进行封装屏蔽掉底层的差异实现自身的跨平台性
http://www.w-s-a.com/news/936398/

相关文章:

  • 泰安中呼网站建设有限公司 概况个人网站的设计与实现参考文献
  • 圣诞节网站怎么做怎么获取网站的图片
  • 想找个人做网站音乐网站建设教程视频教程
  • 网站收录一键提交阿里巴巴做网站多少钱
  • 怎么做网站投放广告商务网站建设实训报告
  • 服装代销的网站源码国内电子商务网站有哪些
  • qq空间怎么做网站做企业平台的网站有哪些
  • 网站的优缺点wordpress手机适配模板中文
  • 福州网站建设H5广告公司简介简短
  • 网站404页面的作用app开发郑州
  • 亚马逊中国网站建设目标网站建设的策划
  • 林州网站建设服务徐州网站建设
  • 如何检测网站死链景德镇网站建设哪家好
  • 旅游网站开发目标天津专业做网站公司
  • 名者观看网站快手小程序
  • 网络架构扁平化windows优化大师好不好
  • 安康养老院收费价格表兰州seo整站优化服务商
  • 网站开发技术方案模板无锡网站建设推荐
  • 自助建站系统注册三维家3d设计软件免费
  • 做seo网站标题重要吗郑州众诚建设监理有限公司网站
  • 建设网站南沙区百度关键词推广怎么做
  • 网站建设公司做销售前景好不好石家庄外贸网站制作
  • windows2008做网站网站首页打开速度
  • 做外贸要做什么网站服装设计图
  • 中山市路桥建设有限公司网站网站开发角色分配权限
  • 加强档案网站建设网站搭建好了不用会不会被攻击
  • 维护网站信息网络建设服务
  • 网站建设策划书模板下载用自己电脑配置服务器做网站
  • 360免费建站空间淘宝数据网站开发
  • 做分销的网站本地dede网站怎么上线