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

好用的html 模板网站上海今天刚刚发生的新闻

好用的html 模板网站,上海今天刚刚发生的新闻,公司网站去哪里做,品牌网站建设小蝌蚪#x1f3ac; 个人主页#xff1a;谁在夜里看海. #x1f4d6; 个人专栏#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长#xff0c;行则将至 目录 #x1f4da;前言#xff1a;一切皆文件 #x1f4da;一、C语言的文件接口 #x1f4d6;1.文件打… 个人主页谁在夜里看海. 个人专栏《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长行则将至 目录 前言一切皆文件  一、C语言的文件接口 1.文件打开 语法 本质 示例 2.文件读取 语法 示例 3.文件写入 语法 示例 4.文件关闭 语法 作用 5.默认流指针 二、系统调用接口 1.文件打开 语法 示例 2.文件读取 语法 示例 3.文件写入 语法 示例 4.文件关闭 语法 三、底层调用上层封装 1.底层调用 2.上层封装 3.示例 ✅4.总结  四、文件描述符fd 1.工作原理 示例 2.分配原则 五、重定向 1.常见的重定向 2.本质 3.dup2系统调用 语法  示例 六、总结 前言一切皆文件  在正式开始文件操作的介绍之前我们先来解决一个问题什么是文件 我们常见的文件有文本文件如.txt.cpp二进制文件如编译后的可执行文件图像文件等等我们和这些文件打交道无非就是对文件写入和对文件读取然而我们是怎么实现对文件的写入和读取的呢其实操作系统为我们提供了这一切我们告诉系统要访问哪个文件调用系统提供的方法就实现了对文件的操作。 但文件的概念并不仅仅局限于磁盘上的存储内容在操作系统中几乎所有资源都可以通过类似“文件”的方式来进行访问和操作。无论是硬盘上的数据还是连接计算机的外设设备操作系统都通过类似文件的机制来统一管理他们。这是操作系统设计的一个重要思想——一切皆文件。 在这个框架下设备如键盘、鼠标、网络接口、内存等不再是与文件不同的资源而是被抽象为一种特殊类型的文件通过统一的系统调用接口我们可以像操作普通文件那样操作这些设备这种设计方式使得我们能够以一种一致的方式访问硬件资源。 下面我们来介绍操作系统具体是如何对文件进行操作以及如何以“文件”的方式管理各种设备的。 一、C语言的文件接口 任何对文件的操作都可以看成对数据的访问、读取和写入系统为我们提供了这些操作的接口下面我们就来看看C语言下的文件接口 1.文件打开 语法 C语言提供了标准库函数 fopen() 用于打开文件 FILE *fopen(const char *filename, const char *mode);① 参数1filename表示文件名指定要打开的文件路径可以是绝对路径也可以是相对路径 ② 参数2mode文件打开模式指定打开文件的方式文件操作的权限常见的有 r只读方式打开文件文件必须存在 w只写方式打开文件文件不存在则创建存在则清空文件 a追加模式文件不存在则创建存在则数据追加到文件末尾 rb以二进制模式读取文件 rw以二进制模式写入文件 ③ 返回值类型FILE*文件指针用于标记当前打开的文件 本质 fopen文件访问其实是做了以下工作 1. 定位当前文件 我们打开一个文件的本质其实是向系统申请指定文件的描述符FILE*指针通过这个描述符系统就能定位文件才能完成后续的读写操作。所以对文件操作之前一定要先打开文件其实就是获取文件描述符 在C语言中文件描述符以指针的形式存在FILE * 是一个指向文件对象的指针它是一个结构体内部包含了文件操作的状态如文件位置、访问模式等。 2.设置文件访问模式 打开文件时需要指定文件的“访问模式”如读取、写入、追加等这告诉操作系统你希望如何使用文件是否允许读取文件内容是否可以修改文件文件是否追加数据如果文件不存在是否需要创建。 3.定位文件指针 当文件被打开时操作系统会初始化一个文件指针指示文件中当前可以进行读写操作的位置。在文件读取或写入时文件指针会根据操作而前进或后退。例如当你读一个文件时文件指针会向前移动直到读到文件的末尾EOF。当你写一个文件时文件指针通常会向文件的结尾移动或者在追加模式下继续从文件的末尾写入。  示例 FILE *fp fopen(myfile, w);if(!fp){printf(fopen error!\n); // 访问失败返回空指针} 这里以w只写的方式打开myfile文件文件不存在则创建存在则清空并返回一个文件指针 如果该文件没有写权限时打开失败返回空指针。 2.文件读取 语法 C语言提供了标准库函数 fread() 用于读取文件数据到缓冲区中 ssize_t fread(void *ptr, size_t size, size_t count, FILE *stream);① 参数1ptr指向存储读取数据的缓冲区的指针读取的数据会存放到该缓冲区 ② 参数2size读取的单个数据元素的大小单位为字节 ③ 参数3count读取的元素个数 ④ 参数4stream文件指针FILE *就是前面 fopen 的返回值  ⑤ 返回值类型size_t返回成功读取的元素个数count 示例 #include stdio.h #include stdlib.hint main() {FILE *fp fopen(numbers.dat, rb);if (fp NULL) {perror(Error opening file);return 1;}int numbers[100];size_t elementsRead fread(numbers, sizeof(int), 100, fp);if (elementsRead ! 100) {if (feof(fp)) {printf(Reached end of file.\n);} else {perror(Error reading file);}}for (size_t i 0; i elementsRead; i) {printf(%d , numbers[i]);}printf(\n);fclose(fp);return 0; }fread() 这里用于读取 numbers.dat 文件的100个整数如果文件中少于100个整数fread() 会读取到文件结束并返回实际读取的文件个数。 使用 feof() 检查文件是否到达文件末尾到达返回1否则返回0。 3.文件写入 C语言提供了标准库函数 fwrite() 用于文件写入与 fread() 相对应 语法 ssize_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);① 参数1ptr指向写入数据指针可以是数组、结构体、字符串等 ② 参数2size写入的单个数据元素的大小单位为字节 ③ 参数3count写入的元素个数 ④ 参数4stream文件指针FILE *就是前面 fopen 的返回值  ⑤ 返回值类型size_t返回成功写入的元素个数count 可以看出 fwrite() 和 fread() 的函数构造是一样的。 示例 #include stdio.h #include stdlib.hint main() {FILE *fp fopen(numbers.dat, wb);if (fp NULL) {perror(Error opening file);return 1;}int numbers[] {1, 2, 3, 4, 5};size_t elementsWritten fwrite(numbers, sizeof(int), 5, fp);if (elementsWritten ! 5) {perror(Error writing file);}fclose(fp);return 0; }fwrite() 将整数数组 numbers 中的5个整数写入文件 number.dat如果写入的元素个数小于预期程序会打印错误信息 ❗️注意 写入文件时必须使用 wb 或 w 模式打开文件使用 wb 或 w 打开文件时会清空文件的现有内容如果文件已经存在。如果你希望追加数据而不是覆盖原文件可以使用 a 或 ab模式打开文件。 4.文件关闭 fclose() 函数用于关闭 fopen() 打开的文件并释放文件的资源。关闭文件后不能再通过该文件指针访问文件内容 语法 #include stdio.hint fclose(FILE *stream);① 参数stream指向FILE对象的指针表示要关闭的文件 ② 返回值类型int关闭成功返回0失败返回 EOF可以通过 perror() 获取错误信息。 作用 1.冲刷缓冲区如果文件是以写方式打开的fclose() 会保证缓冲区的数据被刷新到磁盘如果有任何未写入的数据都会被写入目标文件。 2.释放资源关闭文件后操作系统会释放与该文件相关的资源例如文件描述符。这对于防止资源泄漏非常重要。 3.文件指针失效文件关闭后文件指针不再有效。若再次访问该指针将导致未定义行为。 5.默认流指针 fopen()返回的文件指针我们又称之为文件流指针因为文件本质上是一个数据流它可以从文件中读取数据也可以向文件中写入数据。在这种抽象下文件操作就像处理一个数据流而文件流指针则是指向这个流的一个句柄。 在C语言中有三个默认的文件流指针分别指向标准输入、标准输出和标准错误输出使得我们无需显式地打开文件即可进行常见的文件操作 ① stdin 是标准输入流指向键盘输入可以使用 scanf() 从标准输入读取数据也可以通过这个流指针将键盘输入的数据存储到磁盘文件中 ② stdout 是标准输流指向终端或控制台可以使用 printf() 将数据输出到标准输出也可以通过流指针将磁盘文件内容输出到标准输出中 #include stdio.h#include string.hint main(){const char *msg hello fwrite\n;fwrite(msg, strlen(msg), 1, stdout);printf(hello printf\n);fprintf(stdout, hello fprintf\n);return 0;} ③ stderror 是标准错误流用于输出错误信息。也指向终端或控制台。 二、系统调用接口 在操作系统中文件操作不仅仅是通过标准库函数如 fopen(), fread(), fwrite(), 和 fclose() 实现的还可以通过系统调用接口直接进行。系统调用提供了低级别、直接的操作系统资源访问方式包括对文件的操作。这些系统调用通常用于底层编程它们绕过标准库函数直接与操作系统内核交互。 1.文件打开 在 Linux 系统中文件的打开操作是通过系统调用 open() 完成的。open() 函数会返回一个文件描述符而不是 FILE* 指针这是操作文件的基础 语法 int open(const char *pathname, int flags, mode_t mode);① 参数1pathname文件路径指定要打开的文件。 ② 参数2flags指定文件的打开模式如 O_RDONLY只读模式 O_WRONLY只写模式 O_RDWR读写模式 O_CREAT如果文件不存在则创建 O_APPEND追加模式 ③ 参数3mode文件的默认权限设置仅在创建新文件时有效通常为0644权限位: 0表示当前数字为八进制我们在设置权限时要考虑三类用户所有者所有组以及其他用户 644表示所有者权限为可读可写不可执行所有组和其他用户仅可读不可写不可执行。 ④ 返回值int打开成功时返回一个非负整数表示文件描述符打开失败返回-1。int类型的文件描述符和FILE*指针作用一样都可以指向文件前者可以看作数组下标后者作为指针指向。 示例 #include fcntl.h #include unistd.hint main() { int fd1 open(myfile_1, O_RDONLY); // mode可缺省int fd2 open(myfile_2, O_WRONLY, 0664); } 2.文件读取 系统调用 read() 用于从已打开的文件描述符中读取数据 语法 ssize_t read(int fd, void *buf, size_t count);① 参数1fd文件描述符通过 open() 获取。 ② 参数2buf缓冲区存储读取的数据。 ③ 参数3要读取的字节数。 ④ 返回值ssize_t成功时返回实际读取的字节数失败时返回 -1所以这里不能使用size_t作为返回值而是ssize_t 示例 #include stdio.h #include fcntl.h #include unistd.h #include string.hint main(){int fd open(myfile, O_RDONLY);if(fd 0){perror(open);return 1;}const char *msg hello bit!\n;char buf[1024];while(1){ssize_t s read(fd, buf, strlen(msg));//类比writeif(s 0){printf(%s, buf);}else{break;}}close(fd);return 0;} 3.文件写入 系统调用 write() 用于将数据写入文件 语法 ssize_t write(int fd, const void *buf, size_t count);示例 #include stdio.h #include fcntl.h #include unistd.h #include string.hint main(){umask(0);int fd open(myfile, O_WRONLY|O_CREAT, 0644);if(fd 0){perror(open);return 1;}int count 5;const char *msg hello bit!\n;int len strlen(msg);while(count--)write(fd, msg, len);close(fd);return 0;} ✅umask()是Linux中设置权限掩码的系统调用用于控制文件创建的默认权限调用 umask(0) 将文件创建掩码设置为 0意味着没有权限被去除系统会允许最大权限的创建。 如果调用 umask(002)则创建的文件会去掉 2 (即 0002)那么文件权限将变成 664目录权限将变成 775即去除其他用户的写权限。 4.文件关闭 系统调用 close() 用于关闭打开的文件描述符释放相关资源 语法 int close(int fd);① 参数fd文件描述符通过 open() 获取。 ② 返回值int成功时返回 0失败时返回 -1 。 作用与fclose相同也是冲刷缓冲区以及释放资源。 三、底层调用上层封装 ❓C语言标准库函数与系统调用函数都可以实现对文件的访问操作那么它们之间有什么关联呢 ✅C语言标准库函数是对系统调用的上层封装 1.底层调用 底层调用即系统调用是操作系统提供的接口允许用户程序与操作系统内核进行交互。当程序需要进行文件操作时实际上是通过调用操作系统内核提供的系统调用接口完成的常见的系统调用接口有 open(), write(), read(), close() 等这些系统调用直接与操作系统的文件系统进行交互。 2.上层封装 C语言标准库函数 fopen(), fread(), fwrite(), fclose() 是对操作系统提供的系统调用的封装它们提供了更高层次的接口使得使用者不需要直接与操作系统底层交互能够更便捷地进行文件操作。标准库函数内部实现了文件描述符的管理、缓冲区的操作等屏蔽了底层的细节。 3.示例 open() 是一个系统调用直接与操作系统交互返回一个文件描述符。这个文件描述符可以用于进一步的 read()、write() 等操作。其实现较为底层涉及操作系统的文件系统和内存管理。 fopen() 是 C 语言标准库函数它的内部实现使用了 open() 系统调用来打开文件。除了 open()fopen() 还管理了缓冲区的初始化等工作简化了文件操作过程。fopen() 返回的是一个文件指针FILE*它在标准库内部使用该指针来进行文件操作而不是直接暴露文件描述符。 ✅4.总结  特性系统调用 open() / read() / write()系统调用 open() / read() / write()功能直接与操作系统交互底层文件操作提供高层接口封装底层系统调用返回值文件描述符int文件指针FILE*管理缓冲区不负责缓冲区管理自动管理文件缓冲区提高效率使用难度较低层涉及操作系统管理较高层易于使用屏蔽底层细节适用场景需要精细控制文件操作的底层程序一般的文件操作简洁高效的接口 四、文件描述符fd 文件描述符File Descriptor简称fd是操作系统用来表示已打开文件的整数。它是系统用来跟踪打开文件的标识符与标准流、系统调用的接口密切相关。 1.工作原理 每当程序调用 open() 函数打开一个文件操作系统会为该文件分配一个文件描述符。文件描述符是一个非负整数用于在后续的系统调用中标识该文件。 操作系统通常会为每个进程维护一个文件描述符表其中每个文件描述符对应一个打开的文件或设备。在 Linux 系统中文件描述符通常从 0 开始分配。0、1、2 是系统默认的标准输入、标准输出和标准错误输出流而其他文件描述符则用于指向程序显式打开的文件。 示例 #include fcntl.h #include unistd.h #include stdio.hint main() {int fd open(example.txt, O_RDONLY);if (fd -1) {perror(Error opening file);return 1;}// 使用文件描述符fd读取文件内容char buffer[100];ssize_t bytesRead read(fd, buffer, sizeof(buffer));if (bytesRead 0) {write(1, buffer, bytesRead); // 输出到标准输出}close(fd); // 关闭文件描述符return 0; }在这个例子中程序通过 open() 获取文件描述符 fd然后用 read() 读取文件内容最后用 close() 关闭文件描述符。文件描述符 fd 在操作系统内部对应于打开的文件或设备操作系统会根据它来执行读取操作。 2.分配原则 文件描述符的分配原则是怎么样的呢来看看下面这段代码 #include stdio.h #include sys/types.h #include sys/stat.h #include fcntl.hint main(){int fd open(myfile, O_RDONLY);if(fd 0){perror(open);return 1;}printf(fd: %d\n, fd);close(fd);return 0;} 此时fd是3如果我将0或者2关闭呢 #include stdio.h #include sys/types.h #include sys/stat.h #include fcntl.hint main(){close(0);//close(2);int fd open(myfile, O_RDONLY);if(fd 0){perror(open);return 1;}printf(fd: %d\n, fd);close(fd);return 0;} 发现此时fd为0或者2由此可以得到文件描述符fd的分配原则 在files_struct数组当中找到当前没有被使用的 最小的一个下标作为新的文件描述符。  五、重定向 重定向Redirection是操作系统提供的一种机制允许将程序的输入和输出从默认设备通常是终端或控制台重定向到其他设备或文件。重定向通常通过操作系统提供的文件描述符来实现。 例如还是上面那段代码我们关闭1 #include stdio.h #include sys/types.h #include sys/stat.h #include fcntl.h #include stdlib.hint main(){close(1);int fd open(myfile, O_WRONLY|O_CREAT, 00644);if(fd 0){perror(open);return 1;}printf(fd: %d\n, fd);fflush(stdout);close(fd);exit(0);} 此时我们发现本应该输出到显示器上的内容输出到了文件myfile中其中fd1这种现象叫做输出重定向。常见的重定向有:, , 1.常见的重定向 (输出重定向): 功能: 将命令的标准输出重定向到一个文件中。如果目标文件已经存在则会覆盖文件内容。 echo Hello, World! output.txt这会将 Hello, World! 输出到 output.txt 文件中覆盖文件原有内容。 (追加输出重定向) 功能: 将命令的标准输出追加到文件末尾。如果目标文件不存在则会创建文件。 echo New line of text output.txt这会将 New line of text 追加到 output.txt 文件的末尾。 (输入重定向) 功能: 将文件的内容作为标准输入传递给命令。 sort input.txt这会将 input.txt 文件的内容传递给 sort 命令进行排序。 这三种重定向符号是最常见的用于控制数据流向文件或从文件读取数据。在复杂的脚本或命令行操作中它们非常有用能够帮助用户将输出存储到文件中或从文件中读取数据。 2.本质 重定向的本质是改变数据流的方向每个文件描述符如 0, 1, 2都关联一个 file_struct文件结构体。当进行重定向操作时操作系统需要首先清空当前文件描述符的相关信息然后修改文件描述符的指向例如将2重定向到1时  ① 清除 2 指向的文件结构体内容 ② 修改 2 的指向使其指向 1 所指向的文件结构体内容。 3.dup2系统调用 dup2 是一个用于文件描述符复制的系统调用它的作用是将一个现有的文件描述符复制到另一个文件描述符上替换掉目标文件描述符原有的内容。 语法  int dup2(int oldfd, int newfd);① oldfd源文件描述符表示要复制的现有文件描述符 ② newfd目标文件描述符表示复制到该文件描述符。如果该文件描述符已经打开则它会被关闭然后复制 oldfd 的内容。 示例 #includestdio.h #includefcntl.h #includeunistd.hint main() {int fd open(./tmp.txt, O_RDWR|O_CREAT, 0664);if (fd 0)return -1;dup2(fd, 1);printf(i like linux!\n);return 0; }这里我们将标准输出重定向到文件tmp.txt中执行结果 六、总结 在 C 语言中标准库函数提供了较高层次的抽象使得文件操作变得简便易用。我们通过 fopen() 打开文件利用 fread() 和 fwrite() 进行读写操作并通过 fclose() 关闭文件。这些操作的实现背后实际上是依赖于操作系统提供的低级系统调用如 open()、read()、write() 和 close()。这些系统调用直接与操作系统内核进行交互提供了更精细的控制。 通过对比系统调用与标准库函数的使用场景我们可以更清楚地理解它们各自的优势和适用范围。标准库函数封装了底层细节适合一般的文件操作而系统调用则提供了更低层次、更精细的操作适合需要高性能和底层控制的场景。 以上就是【文件操作的艺术——从基础到精通】的全部内容欢迎指正~  码文不易还请多多关注支持这是我持续创作的最大动力  
文章转载自:
http://www.morning.lphtm.cn.gov.cn.lphtm.cn
http://www.morning.xknsn.cn.gov.cn.xknsn.cn
http://www.morning.yrjhr.cn.gov.cn.yrjhr.cn
http://www.morning.bxqpl.cn.gov.cn.bxqpl.cn
http://www.morning.fpqsd.cn.gov.cn.fpqsd.cn
http://www.morning.gqfks.cn.gov.cn.gqfks.cn
http://www.morning.dnvhfh.cn.gov.cn.dnvhfh.cn
http://www.morning.ryjqh.cn.gov.cn.ryjqh.cn
http://www.morning.fdxhk.cn.gov.cn.fdxhk.cn
http://www.morning.rdkgw.cn.gov.cn.rdkgw.cn
http://www.morning.wfysn.cn.gov.cn.wfysn.cn
http://www.morning.nsmyj.cn.gov.cn.nsmyj.cn
http://www.morning.pwghp.cn.gov.cn.pwghp.cn
http://www.morning.chtnr.cn.gov.cn.chtnr.cn
http://www.morning.pwmpn.cn.gov.cn.pwmpn.cn
http://www.morning.wcqkp.cn.gov.cn.wcqkp.cn
http://www.morning.xsfny.cn.gov.cn.xsfny.cn
http://www.morning.ityi666.cn.gov.cn.ityi666.cn
http://www.morning.jcypk.cn.gov.cn.jcypk.cn
http://www.morning.sgbss.cn.gov.cn.sgbss.cn
http://www.morning.yckrm.cn.gov.cn.yckrm.cn
http://www.morning.pxjp.cn.gov.cn.pxjp.cn
http://www.morning.txtgy.cn.gov.cn.txtgy.cn
http://www.morning.hwsgk.cn.gov.cn.hwsgk.cn
http://www.morning.mqlsf.cn.gov.cn.mqlsf.cn
http://www.morning.fwgnq.cn.gov.cn.fwgnq.cn
http://www.morning.phxdc.cn.gov.cn.phxdc.cn
http://www.morning.lrskd.cn.gov.cn.lrskd.cn
http://www.morning.lngyd.cn.gov.cn.lngyd.cn
http://www.morning.msgcj.cn.gov.cn.msgcj.cn
http://www.morning.jqkjr.cn.gov.cn.jqkjr.cn
http://www.morning.hmdyl.cn.gov.cn.hmdyl.cn
http://www.morning.ckwxs.cn.gov.cn.ckwxs.cn
http://www.morning.ktmbp.cn.gov.cn.ktmbp.cn
http://www.morning.nzmqn.cn.gov.cn.nzmqn.cn
http://www.morning.srckl.cn.gov.cn.srckl.cn
http://www.morning.slmbg.cn.gov.cn.slmbg.cn
http://www.morning.pxlpt.cn.gov.cn.pxlpt.cn
http://www.morning.kntsd.cn.gov.cn.kntsd.cn
http://www.morning.yrjfb.cn.gov.cn.yrjfb.cn
http://www.morning.lmjtp.cn.gov.cn.lmjtp.cn
http://www.morning.rgrdd.cn.gov.cn.rgrdd.cn
http://www.morning.pxwjp.cn.gov.cn.pxwjp.cn
http://www.morning.qqhersx.com.gov.cn.qqhersx.com
http://www.morning.yrrnx.cn.gov.cn.yrrnx.cn
http://www.morning.rjnm.cn.gov.cn.rjnm.cn
http://www.morning.mpngp.cn.gov.cn.mpngp.cn
http://www.morning.tsmxh.cn.gov.cn.tsmxh.cn
http://www.morning.mgwdp.cn.gov.cn.mgwdp.cn
http://www.morning.ahscrl.com.gov.cn.ahscrl.com
http://www.morning.pcjw.cn.gov.cn.pcjw.cn
http://www.morning.xstfp.cn.gov.cn.xstfp.cn
http://www.morning.nspzy.cn.gov.cn.nspzy.cn
http://www.morning.ntwfr.cn.gov.cn.ntwfr.cn
http://www.morning.rlns.cn.gov.cn.rlns.cn
http://www.morning.xkpjl.cn.gov.cn.xkpjl.cn
http://www.morning.linzhigongmao.cn.gov.cn.linzhigongmao.cn
http://www.morning.hlrtzcj.cn.gov.cn.hlrtzcj.cn
http://www.morning.bnkcl.cn.gov.cn.bnkcl.cn
http://www.morning.lgpzq.cn.gov.cn.lgpzq.cn
http://www.morning.kyytt.cn.gov.cn.kyytt.cn
http://www.morning.qxwwg.cn.gov.cn.qxwwg.cn
http://www.morning.qnxzx.cn.gov.cn.qnxzx.cn
http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn
http://www.morning.cklld.cn.gov.cn.cklld.cn
http://www.morning.qnhpq.cn.gov.cn.qnhpq.cn
http://www.morning.cwzzr.cn.gov.cn.cwzzr.cn
http://www.morning.bcdqf.cn.gov.cn.bcdqf.cn
http://www.morning.pwdrc.cn.gov.cn.pwdrc.cn
http://www.morning.yhxhq.cn.gov.cn.yhxhq.cn
http://www.morning.ftwlay.cn.gov.cn.ftwlay.cn
http://www.morning.bjjrtcsl.com.gov.cn.bjjrtcsl.com
http://www.morning.khfk.cn.gov.cn.khfk.cn
http://www.morning.mrcpy.cn.gov.cn.mrcpy.cn
http://www.morning.yckrm.cn.gov.cn.yckrm.cn
http://www.morning.mrncd.cn.gov.cn.mrncd.cn
http://www.morning.jtqxs.cn.gov.cn.jtqxs.cn
http://www.morning.sglcg.cn.gov.cn.sglcg.cn
http://www.morning.rmrcc.cn.gov.cn.rmrcc.cn
http://www.morning.ghkgl.cn.gov.cn.ghkgl.cn
http://www.tj-hxxt.cn/news/279020.html

相关文章:

  • 山东省住房城乡和建设厅网站网上购物哪个平台质量好又便宜
  • 建网站行业做资源网站盈利点
  • 软装设计公司网站平顶山公司做网站
  • 梁山网站建设电话网络营销方案设计范文
  • 外贸国际站有哪些平台一个人做网站 知乎
  • 佛山网站建设品牌wordpress图片上传失败
  • 网站刷单账务处理怎么做网站域名空间管理
  • 在线网站建设机构资阳建网站
  • 高端网站制作 专业制作平台宁波网站制作与推广价格
  • 网站建设方案计划书人员规划花桥网站制作
  • 平顶山专业做网站公司临桂区建设局网站
  • 做英文网站wordpress 4.9.2漏洞
  • 哈尔滨网页设计制作seo排名助手
  • 如何 做镜像网站网推项目平台
  • 广州建设教育网站天津网站优化哪家好
  • 网页素材网站免费shortcode wordpress
  • 泉州营销型网站设计可以自己制作动画的app
  • 手机网站开发标准怎么重新运行wordpress
  • 晋城建设局网站wordpress 不显示文章归档
  • 吴江住房和城乡建设部网站京东自营网上商城
  • 招牌做的好的网站有哪些asp.net 网站提速
  • 网站html动态效果代码服务器上如何建设多个网站
  • 网站建设标题wordpress显示相关文章
  • 投稿网站均安建网站
  • 济南网站建设制作设计不让网站开发公司进入后台
  • 网站如何加链接网站开发类论文题目
  • 黄骅港引航站兄弟们试试这个网址
  • 企业网站怎么做连接网站建设与推广工资
  • 专门做水产海鲜的网站吗会考网页制作视频教程全集
  • 建设银行个人网银网站seo优化步骤