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

免费做公众号的网站昆明自助建站模板

免费做公众号的网站,昆明自助建站模板,郑州网络营销网站,网站轮播图怎么保存目录 进程的特点 进程特点的介绍 进程时如何实现并发性的 进程间如何切换 概念铺设 PC指针 上下文 环境变量 PATH 修改PATH HOME SHELL env 命令行参数 什么是命令行参数#xff1f; 打印命令行参数 通过函数获得环境变量 getenv 命令行参数 env 修改环境变…目录 进程的特点 进程特点的介绍 进程时如何实现并发性的 进程间如何切换 概念铺设 PC指针 上下文 环境变量 PATH 修改PATH HOME SHELL env 命令行参数 什么是命令行参数 打印命令行参数 通过函数获得环境变量 getenv 命令行参数 env 修改环境变量 环境变量总结 本地变量 内建命令 查看本地变量 内建命令 进程的特点 根据我们前面学习过的进程我们总结一下进程的特点。 竞争性进程直接是相互竞争的进程想要运行就必须竞争CPU资源也需要竞争其他资源。 独立性进程之间是互不干扰的所以如果某一个进程挂掉之后并不会影响其他的进程。 并行性如果在多CPU的环境下多个进程可以同时运行。 并发性在单CPU的环境下进程之间是基于时间片轮转的进程在运行特定的时间后就必须换下一个进程来运行。 进程特点的介绍 竞争性由于我们每一个进程想要运行都是需要占用CPU资源的但是我们的CPU只有一个所以我们的进程必须竞争CPU资源所以我们的进程是具有竞争性的。 独立性在前面学习的子进程中我们的父子进程共享同一份代码而数据也是写时拷贝的并且我们的进程都是有自己独立的代码和数据所以我们进程也是互补干扰的所以为我们的进程时具有独立性的。 并行性当计算机有多个CPU的时候计算机内多个进程就可以在多个CPU上同时运行所以这就是进程的并行性。 并发性由于大多数环境下计算机中都只有一个CPU所以为了让进程都可以得到CPU资源那么就需要让进程可以在运行的时候切换让每个进程执行特定的时间就切换到下一个进程由于计算机的速度时很快的所以我们并不会感受到进程间切换的卡顿感。 下面我们主要介绍一下进程的并发性。 进程时如何实现并发性的 在计算机中一定有很多的进程所以进程之间必须要切换才能让CPU可以执行不同的进程但是什么时候切换也是一个问题所以这里还引入了时间片轮转就是让进程运行固定的时间然后切换到下一个进程。 所以并发就是通过两点来实现 进程间切换 时间片轮转 所以我们的并发就是基于进程间切换的时间片轮转算法。 进程间如何切换 既然我们知道进程是通过切换和时间片轮转来实现的并发那么进程是如何切换的 概念铺设 PC指针 我们的计算机时如何知道我们的程序执行到哪一步的 由于我们的进程时需要切换的所以我们进程再次被切换到CPU上执行到时候那么我们的计算机时如何知道该程序被执行到哪一步的 函数计数器pc指针就是通过函数计数器也称为PC指针来实现。 如果CPU想再次执行我们该程序的代码那么CPU就会执行pc指针的下一条代码。 上下文 在提这个概念之前我们先用一个场景来描述一下。 场景 你有一个要去当兵的朋友你的朋友被部队选上了然后你的朋友很高兴回宿舍后什么都不管第二天就走了然后当了两年兵回来后发现自己宿舍的东西没了自己的学籍也没了因为在这两年里面学校不知道你的朋友当兵去了然后由于你的朋友每天都不上课所以被学校开除了学籍。 场景 还是你的朋友同样被选上了这一次你的朋友回宿舍后收拾好了自己的行囊然后给辅导员也说了这个事情辅导员帮你的朋友办理了各种手续以及档案等你曾经的记录然后让你的朋友带走这次你的朋友回来后把档案那些东西又交给了学校学校帮忙恢复了学习然后你的朋友又可以开始正常上课了。 通过上面的这两个故事我们感觉到了什么那么如果我们一个CPU要被切换出去的时候CPU曾经的数据要怎么办 在我们的 CPU 中有很多寄存器这些寄存器就是保存的是当前进程的数据如果我们要切换走一个进程的时候我们需要把这些寄存器里面的数据也让该进程带走好让该进程下一次回来的时候在把上一次运行的数据带过来继续运行。 所以寄存器里面的数据就是 “上下文” 。 而进程就必须把上下文保护好好让下一次运行的时候知道如何运行。 概念布设完毕所以进程间是如何切换的 进程切换的要求 保护上下文将寄存器里面的数据让进程保存起来。 恢复上下文当一个进程恢复的时候需要先将它的上下文加载进去。 进程的特点就到这里我们也说了进程的并发也说了为什么可以实现并发还有并发的条件以及实现并发条件之一的进程切换的部分问题。 环境变量 在说这个概念之前我们想先看一下环境变量然后我们正在说环境变量的概念。 PATH PATH 是一个系统中的环境变量那么如何查看PATH呢 [lxyhecs-165234 linux5]$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxy/.local/bin:/home/lxy/bin 我们想要查看 PATH 我们可以 echo 然后 $ 环境变量就可以查看。 那么这个PATH 是什么呢 我们现在先写一个代码来看一下。 int main() {for(int i 0; i 10; i)printf(myproc: [%d]\n, i);return 0; } 我们然后编译这个代码我们运行它。 [lxyhecs-165234 linux5]$ ./myproc myproc: [0] myproc: [1] myproc: [2] myproc: [3] myproc: [4] myproc: [5] myproc: [6] myproc: [7] myproc: [8] myproc: [9] 我们运行的时候 ./myproc 我们前面说过其实我们的指令也是代码那么为什么我们的指令就不用表明路劲呢 因为我们的指令会自己查找而在哪查找呢就是在 PATH 这个环境变量中。 /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxy/.local/bin:/home/lxy/bin 我们就会在上面的这些路劲里面查找我们的指令上面这些路劲就是我们的默认指令查找路劲。 如果我们想要自己的程序也不用指明路劲呢 修改PATH 我们只需要把我们这个程序的路劲添加到 PATH 中那我们我们就不用指明路劲了下面我们看一下如何添加。 [lxyhecs-165234 linux5]$ PATH/home/lxy/108/linux5 如果我们之间这样就是把 PATH 给覆盖了并不是添加了当前路劲所以我们应该如何添加呢 [lxyhecs-165234 linux5]$ PATH$PATH:/home/lxy/108/linux5 下面在查看一下 PATH [lxyhecs-165234 linux5]$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxy/.local/bin:/home/lxy/bin:/home/lxy/108/linux5 我们就添加进来了下面看一下是否可以不用路劲就可以执行。 [lxyhecs-165234 linux5]$ myproc myproc: [0] myproc: [1] myproc: [2] myproc: [3] myproc: [4] myproc: [5] myproc: [6] myproc: [7] myproc: [8] myproc: [9] 确实可以执行实际上这个 PATH环境变量是临时的我们的 PATH 环境变量实际上实在系统中的然后 bash 启动的时候读取的所以我们可以随便修改这个环境变量如果修改错了我们直接重启 bash 就可以了所以我们直接改掉 PATH 路劲然后我们看那些指令是否就不能用了。 [lxyhecs-165234 linux5]$ PATH/ [lxyhecs-165234 linux5]$ ll -bash: ls: command not found [lxyhecs-165234 linux5]$ ls -bash: ls: command not found [lxyhecs-165234 linux5]$ cd .. [lxyhecs-165234 108]$ cd linux5 我们看到我们的 ll ls 部分指令就使用不了了但是还是有一些指令可以使用。 我们下面重启一下 bash 就可以了。 我们下面在看两个环境变量。 HOME 我们直接打印查看。 [lxyhecs-165234 linux5]$ echo $HOME /home/lxy 我们当前的 lxy 用户查看的 HOME就是上面的这个样子下面我们换 root 在查看一下。 [roothecs-165234 lxy]# echo $HOME /root 我们的 root 用户的 HOME 环境变量就是上面的这个样子。 SHELL 在看一个 SHELL环境变量。 [lxyhecs-165234 linux5]$ echo $SHELL /bin/bash SHELL 就是我们使用的 shell 是什么我们这里使用的 shell就是 bash。 当然我们的环境变量不止这么一些我们怎么样查看全部的环境变量呢 env 查看全部的环境变量。 [lxyhecs-165234 linux5]$ env XDG_SESSION_ID6727 HOSTNAMEhecs-165234 TERMxterm SHELL/bin/bash HISTSIZE10000 SSH_CLIENT123.138.70.232 62136 22 SSH_TTY/dev/pts/0 USERlxy LD_LIBRARY_PATH:/home/lxy/.VimForCpp/vim/bundle/YCM.so/el7.x86_64 LS_COLORSrs0:di01;34:ln01;36:mh00:pi40;33:so01;35:do01;35:bd40;33;01:cd40;33;01:or40;31;01:mi01;05;37;41:su37;41:sg30;43:ca30;41:tw30;42:ow34;42:st37;44:ex01;32:*.tar01;31:*.tgz01;31:*.arc01;31:*.arj01;31:*.taz01;31:*.lha01;31:*.lz401;31:*.lzh01;31:*.lzma01;31:*.tlz01;31:*.txz01;31:*.tzo01;31:*.t7z01;31:*.zip01;31:*.z01;31:*.Z01;31:*.dz01;31:*.gz01;31:*.lrz01;31:*.lz01;31:*.lzo01;31:*.xz01;31:*.bz201;31:*.bz01;31:*.tbz01;31:*.tbz201;31:*.tz01;31:*.deb01;31:*.rpm01;31:*.jar01;31:*.war01;31:*.ear01;31:*.sar01;31:*.rar01;31:*.alz01;31:*.ace01;31:*.zoo01;31:*.cpio01;31:*.7z01;31:*.rz01;31:*.cab01;31:*.jpg01;35:*.jpeg01;35:*.gif01;35:*.bmp01;35:*.pbm01;35:*.pgm01;35:*.ppm01;35:*.tga01;35:*.xbm01;35:*.xpm01;35:*.tif01;35:*.tiff01;35:*.png01;35:*.svg01;35:*.svgz01;35:*.mng01;35:*.pcx01;35:*.mov01;35:*.mpg01;35:*.mpeg01;35:*.m2v01;35:*.mkv01;35:*.webm01;35:*.ogm01;35:*.mp401;35:*.m4v01;35:*.mp4v01;35:*.vob01;35:*.qt01;35:*.nuv01;35:*.wmv01;35:*.asf01;35:*.rm01;35:*.rmvb01;35:*.flc01;35:*.avi01;35:*.fli01;35:*.flv01;35:*.gl01;35:*.dl01;35:*.xcf01;35:*.xwd01;35:*.yuv01;35:*.cgm01;35:*.emf01;35:*.axv01;35:*.anx01;35:*.ogv01;35:*.ogx01;35:*.aac01;36:*.au01;36:*.flac01;36:*.mid01;36:*.midi01;36:*.mka01;36:*.mp301;36:*.mpc01;36:*.ogg01;36:*.ra01;36:*.wav01;36:*.axa01;36:*.oga01;36:*.spx01;36:*.xspf01;36: MAIL/var/spool/mail/lxy PATH/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxy/.local/bin:/home/lxy/bin PWD/home/lxy/108/linux5 LANGen_US.UTF-8 HISTCONTROLignoredups SHLVL1 HOME/home/lxy LOGNAMElxy SSH_CONNECTION123.138.70.232 62136 192.168.0.70 22 LESSOPEN||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR/run/user/1000 HISTTIMEFORMAT%F %T lxy _/usr/bin/env OLDPWD/home/lxy/108 上面1就是我们全部的环境变量。 我们挑一些介绍一下。 HOSTNAMEhecs-165234 HOSTNAME就是主机名 SHELL/bin/bash SHELL我们前面介绍了。 HISTSIZE10000 HISTSIZE当我们 history 的时候我们就会打印出我们的历史指令而我们的历史指令的保存是由个数限制的而 HISTSIZE 就是最大的存储历史指令的限制。 SSH_TTY/dev/pts/0 这个就是表示我们 bash 输出的时候往哪里输出我们可以在启动一个然后我们 echo 向这个里面写入 hello USERlxy USER表示当前的使用者。 PWD/home/lxy/108/linux5 PWD表示我们当前文件的路劲。 OLDPWD/home/lxy/108 OLDPWD表示我们上一次在那个路劲下。 [lxyhecs-165234 linux5]$ cd / [lxyhecs-165234 /]$ cd - /home/lxy/108/linux5 [lxyhecs-165234 linux5]$ cd - / [lxyhecs-165234 /]$ cd - /home/lxy/108/linux5 cd - 表示就是去上一次的路劲。 上面就是我们的环境变量。 除了我们上面使用命令行操作查看环境变量其实我们还可以使用函数来查看环境变量。 在谈下面的环境变量之前这里先谈一个叫命令行参数。 命令行参数 什么是命令行参数 在我们输入指令的时候后满经常会带一些选项而这些雪乡就是命令行参数。 实际上在C语言或者C中的 main 函数也是可以带命令行参数的只是我们之前的环境都基本是在 windows 下所以没有命令我们也就接触不到命令行参数我们先写一个程序看一下。 int main(int argc, char* argv[]) {if(argc ! 2){printf(需要两个参数\n);return 0;}printf(OK\n);return 0; } 这里我们看这一段代码我们的 main 函数实际上可以带几个参数其中这里带了两个参数一个 argc 一个 argv。 argc表示传过来多少个命令行参数其中最少就是1个也就是运行该函数的参数。 argv表示命令行参数的里面传过来的字符串我们的argv里面存到就是一个char* 的指针。 下面我们运行该函数看一下。 首先我们只有一个参数也就是直接运行该函数。 [lxyhecs-165234 linux5]$ ./myproc 需要两个参数 下面我们传入参数随便传入一个参数。 [lxyhecs-165234 linux5]$ ./myproc -a OK [lxyhecs-165234 linux5]$ ./myproc kkkkkk OK 这里的参数什么都可以只要由两个参数就可以了。 打印命令行参数 既然我们可以拿到命令行参数也有命令行参数的个数那么我们就可以打印它。 int main(int argc, char* argv[]) {for(int i 0; i argc; i)printf(argv[%d]: %s\n, i, argv[i]);return 0; } 这样就可以打印命令行参数了。 我们下面运行改代码试一下。 只有一个参数。 [lxyhecs-165234 linux5]$ ./myproc argv[0]: ./myproc 多个参数。 [lxyhecs-165234 linux5]$ ./myproc -a -b -c hello argv[0]: ./myproc argv[1]: -a argv[2]: -b argv[3]: -c argv[4]: hello 通过函数获得环境变量 getenv SYNOPSIS#include stdlib.hchar *getenv(const char *name); getenv 函数传入一个环境变量名然后返回环境变量的值。 下面使用程序来看一下。 int main(int argc, char* argv[]) {if(argc ! 2){printf(需要环境变量\n);}else {printf(%s : %s\n, argv[1], getenv(argv[1]));}return 0; } 这里我们通过命令行参数的方式传入环境变量名然后使用 getenv 函数来获得环境变量。 这里我们直接传入PATH试一下。 [lxyhecs-165234 linux5]$ ./myproc PATH PATH : /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxy/.local/bin:/home/lxy/bin 这里我们获得了环境变量。 下面我们使用环境变量来查看我们的用户我们分别会使用 root 用户和普通用户来查看。 int main() {if(strcmp(getenv(USER), root) 0){printf(无视权限\n);}else {printf(普通用户\n);}return 0; } 使用普通用户。 [lxyhecs-165234 linux5]# ./myproc 普通用户 下面使用 root 用户。 [roothecs-165234 linux5]# ./myproc 无视权限 所以这也就是我们的的权限问题。 命令行参数 env 在 main 函数中的命令行参数其实还可以传入一个参数就是环境变量。 在打印命令行参数前我们先说明一下其实我们的命令行参数和环境变量env中最后一个指针都是null所以即使我们不适用 argv 也可以打印。 int main(int argc, char* argv[], char* env[]) {for(int i 0; argv[i]; i)printf(argv[%d]: %s\n, i, argv[i]);return 0; } 下面传入参数打印。 [lxyhecs-165234 linux5]$ ./myproc -a -b -c -d argv[0]: ./myproc argv[1]: -a argv[2]: -b argv[3]: -c argv[4]: -d 那么下面我们也就直接打印一下我们的 env 环境变量。 [lxyhecs-165234 linux5]$ ./myproc env[0]: XDG_SESSION_ID6739 env[1]: HOSTNAMEhecs-165234 env[2]: TERMxterm env[3]: SHELL/bin/bash env[4]: HISTSIZE10000 env[5]: SSH_CLIENT123.139.60.208 35357 22 env[6]: SSH_TTY/dev/pts/0 env[7]: USERlxy env[8]: LD_LIBRARY_PATH:/home/lxy/.VimForCpp/vim/bundle/YCM.so/el7.x86_64 env[9]: LS_COLORSrs0:di01;34:ln01;36:mh00:pi40;33:so01;35:do01;35:bd40;33;01:cd40;33;01:or40;31;01:mi01;05;37;41:su37;41:sg30;43:ca30;41:tw30;42:ow34;42:st37;44:ex01;32:*.tar01;31:*.tgz01;31:*.arc01;31:*.arj01;31:*.taz01;31:*.lha01;31:*.lz401;31:*.lzh01;31:*.lzma01;31:*.tlz01;31:*.txz01;31:*.tzo01;31:*.t7z01;31:*.zip01;31:*.z01;31:*.Z01;31:*.dz01;31:*.gz01;31:*.lrz01;31:*.lz01;31:*.lzo01;31:*.xz01;31:*.bz201;31:*.bz01;31:*.tbz01;31:*.tbz201;31:*.tz01;31:*.deb01;31:*.rpm01;31:*.jar01;31:*.war01;31:*.ear01;31:*.sar01;31:*.rar01;31:*.alz01;31:*.ace01;31:*.zoo01;31:*.cpio01;31:*.7z01;31:*.rz01;31:*.cab01;31:*.jpg01;35:*.jpeg01;35:*.gif01;35:*.bmp01;35:*.pbm01;35:*.pgm01;35:*.ppm01;35:*.tga01;35:*.xbm01;35:*.xpm01;35:*.tif01;35:*.tiff01;35:*.png01;35:*.svg01;35:*.svgz01;35:*.mng01;35:*.pcx01;35:*.mov01;35:*.mpg01;35:*.mpeg01;35:*.m2v01;35:*.mkv01;35:*.webm01;35:*.ogm01;35:*.mp401;35:*.m4v01;35:*.mp4v01;35:*.vob01;35:*.qt01;35:*.nuv01;35:*.wmv01;35:*.asf01;35:*.rm01;35:*.rmvb01;35:*.flc01;35:*.avi01;35:*.fli01;35:*.flv01;35:*.gl01;35:*.dl01;35:*.xcf01;35:*.xwd01;35:*.yuv01;35:*.cgm01;35:*.emf01;35:*.axv01;35:*.anx01;35:*.ogv01;35:*.ogx01;35:*.aac01;36:*.au01;36:*.flac01;36:*.mid01;36:*.midi01;36:*.mka01;36:*.mp301;36:*.mpc01;36:*.ogg01;36:*.ra01;36:*.wav01;36:*.axa01;36:*.oga01;36:*.spx01;36:*.xspf01;36: env[10]: MAIL/var/spool/mail/lxy env[11]: PATH/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxy/.local/bin:/home/lxy/bin env[12]: PWD/home/lxy/108/linux5 env[13]: LANGen_US.UTF-8 env[14]: HISTCONTROLignoredups env[15]: SHLVL1 env[16]: HOME/home/lxy env[17]: LOGNAMElxy env[18]: SSH_CONNECTION123.139.60.208 35357 192.168.0.70 22 env[19]: LESSOPEN||/usr/bin/lesspipe.sh %s env[20]: XDG_RUNTIME_DIR/run/user/1000 env[21]: HISTTIMEFORMAT%F %T lxy env[22]: _./myproc env[23]: OLDPWD/home/lxy/108 所以这样也可以打印环境变量。 通过上面的学习我们可以看一下环境变量了。 我们在上面发现环境变量是可以变化的当我们登录不同的账户的时候环境变量中的UESR就会变化我们可以知道环境变量是动态的可以变化的。 在而且我们的环境变量实际上是存储在系统中的每一次打开bash就会加载所以我们的环境变量也是居于持久性。 在main函数中我们看到我们main函数还可以传入 env 变量所以我们的 env 实际上是可以被所有的子进程继承的由于我们的进程都是 bash 帮我们创建所以我们的所有的子进程都是可以有环境变量。 其实我们的环境变量还是可以修改的我们看一下。 修改环境变量 我们现在想自己定义一个属于我们自己的环境变量那么该怎么办呢 [lxyhecs-165234 linux5]$ MYVALUE10001 我们上面这样可以吗 实际上是不可以的这样定义的话实际上是“本地变量”。 我们查看一下是查不到的。 [lxyhecs-165234 linux5]$ env | grep MVALUE [lxyhecs-165234 linux5]$ 那么我们的环境变量怎么定义。 [lxyhecs-165234 linux5]$ export MYVALUE [lxyhecs-165234 linux5]$ env | grep MYVALUE MYVALUE10001 我们可以将本地变量前面加一个 export 就可以变为环境变量。 那么怎么删除呢 [lxyhecs-165234 linux5]$ unset MYVALUE [lxyhecs-165234 linux5]$ env | grep MYVALUE [lxyhecs-165234 linux5]$ 环境变量总结 全局性 动态 持久 可修改 其实不仅仅有这些特性还有一些想了解的可以查一下。 本地变量 内建命令 最后一个话题我们前面提到的本地变量和内建命令。 查看本地变量 set命令 这里为了方便知道我们查到的是本地变量我们可以先定义一个本地变量的值。 [lxyhecs-165234 linux5]$ MYVALUE10000 [lxyhecs-165234 linux5]$ set | grep MYVALUE MYVALUE10000 下面我们看一下本地变量有一些什么。 由于太多我们只挑几个看一下。 PS1[\u\h \W]\$ PS2 PS4 我们这三个实际上就是本地变量其中 PS1 就是表示命令行解释器的提示符 我们的普通用户就是 $ 而下面的 就是还可以输入命令 [lxyhecs-165234 linux5]$ ls \-a\-d\本地变量其实只会在本BASH中有效。 内建命令 我们现在来看一个操作。 [lxyhecs-165234 linux5]$ MYVALUE19999 [lxyhecs-165234 linux5]$ echo $MYVALUE 19999 我们前面不是说我们的这些指令实际上就是程序吗那么我们的程序就是 bash 创建子进程来的但是我们的 MYVALUE 是一个本地变量本地变量子进程不是不会继承吗那么echo是怎么样显示出来的 这里就要纠正之前的一个说法了其实我们的指令不一定bash会创建子进程如果是一些比较安全的指令那么还是bash自己执行的。 所以我们的命令实际上是由两种 常规命令bash创建子进程执行。 内建命令bash亲自执行自己调用函数。 还有一个内建命令比如 cd 下面我们写一个代码来看一下cd命令 首先介绍一个函数 SYNOPSIS#include unistd.hint chdir(const char *path); DESCRIPTIONchdir() changes the current working directory of the calling process to the directory specified in path. 该函数传入一个路劲然后可以修改该进程的路劲。 int main(int argc, char* argv[]) {if(argc ! 2){printf(请输入修改路劲\n);}else {sleep(20);printf(开始修改路劲\n);chdir(argv[1]);printf(路劲修改结束\n);sleep(20);}return 0; } 我们在休眠的过程中查看我们的该进程的路劲然后休眠后在查看我们的路劲。 [lxyhecs-165234 linux5]$ ./myproc / 开始修改路劲 路劲修改结束 在我们休眠前我们查到 lrwxrwxrwx 1 lxy lxy 0 Aug 5 19:51 cwd - /home/lxy/108/linux5 休眠后 lrwxrwxrwx 1 lxy lxy 0 Aug 5 19:51 cwd - / 这里看到我们确实修改成功。
http://www.hkea.cn/news/14401127/

相关文章:

  • 尤溪住房和城乡建设局网站磁力搜索器 磁力猫
  • 广东 网站建设wordpress 文章浏览次数
  • 网站开发的硬件环境淘宝网站建设不允许
  • 南阳做那个网站好中国建设基础设施总公司 网站
  • 网站如何做关键词排名crm客户管理系统简介
  • 网站建设方案分析广告设计网站排行榜前十名
  • 三只松鼠网站推广策略怎样创建网站平台
  • 中小企业网站建设信息cms适合做什么网站
  • 做旅游项目用哪家网站好网站建设的组织机构
  • 怎么检查网站有没有做跳转精准扶贫网站建设目的
  • 安丘网站建设aqfeifan河南郑州新闻
  • 做网站需要服务器查询吗wordpress .mo .po
  • 临检中心网站建设wordpress 仿头条主题
  • 宁波网站排名优化徐州cms模板建站
  • 网站建设工作汇报简述网站开发工作流程
  • 多种郑州网站建设wordpress 盒模型大学
  • 如何能去医疗网站做编辑wordpress手机上打不开
  • 兰州手机网站建设官方网站开发商
  • 网站 cms嘉兴网站建设全包
  • 网站建设明细报价设计一个个人网站的基本步骤
  • 网站开发 策划是干嘛的深圳做自适应网站公司
  • 百度安全网站检测做搬家服务网站问卷调查结果
  • 公司招聘网站微豆网络科技有限公司网页设计
  • 手机端网站推广收图片的网站
  • 网站的网页建设银行中国网站首页
  • 网站建设注册小程序tale博客和wordpress
  • 赣州住房建设部网站成都网站设计平台
  • 如果在各大网站做免费的网络推广网页设计实训总结模板
  • wordpress整站备份太原网页设计与制作
  • 阿里云做的网站wordpress文章存档插件