.net网站开发步骤python做网站验证码

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

.net网站开发步骤,python做网站验证码,微信开发小程序公司,seo职业规划Linux开发工具 Linux编辑器-vim使用

  1. vim的基本概念 vim的三种模式#xff0c;分别是命令模式#xff08;command mode#xff09;、插入模式#xff08;Insert mode#xff09;和底行模式#xff08;last line mode#xff09;。 正常/普通/命令模式#xff1a; …Linux开发工具 Linux编辑器-vim使用
  2. vim的基本概念 vim的三种模式分别是命令模式command mode、插入模式Insert mode和底行模式last line mode。 正常/普通/命令模式 插入模式 末行模式在命令模式下Shift : 即可进入该模式 2. vim的基本操作 3.vim命令集 在底行模式下vs 打开多个文件编辑窗口。 Ctrl ww窗口光标切换。 Linux编译器-gcc/g使用
  3. 背景知识 编译分为几个阶段预处理进行宏替换编译生成汇编汇编生成机器可识别代码 链接生成可执行文件或库文件
  4. gcc如何完成 预处理进行宏替换 预处理阶段处理所有以 # 开头的预处理指令如宏定义、文件包含、条件编译、去注释等。 gcc –E hello.c –o hello.i 选项“-E”该选项的作用是让 gcc 在预处理结束后停止编译过程。选项“-o”是指定输出文件的名称。 编译生成汇编 编译阶段中gcc 首先要检查代码的规范性、是否有语法错误等以确定代码实际要做的工作,在检查无误后gcc 把代码翻译成汇编语言。 gcc –S hello.i –o hello.s 选项“-S”来进行查看该选项只进行编译而不进行汇编。 汇编生成机器可识别代码
    汇编阶段将汇编代码转换成机器代码。 gcc –c hello.s –o hello.o 选项“-c”可以看到汇编代码已经转化为“.o”的二进制目标代码 链接生成可执行文件或库文件
    链接阶段将一个或多个目标文件和库文件链接在一起生成最终的可执行文件 gcc hello.o –o hello
  5. 函数库 我们的C程序中并没有定义 “printf” 的函数实现且在预编译中包含的 “stdio.h” 中也只有该函数的声明而没有定义函数的实现那么是在哪里实现 “printf” 函数的呢? 最后的答案是系统把这些函数实现都放到 libc.so.6 的库文件中去了在没有特别指定时gcc 会到系统默认的搜索路径 “/usr/lib” 下进行查找也就是链接到 libc.so.6 库函数中去这样就能实现函数 “printf” 了而这也就是链接的作用。 函数库一般分为静态库和动态库两种 静态库是指编译链接时把库文件的代码全部加入到可执行文件中因此生成的文件比较大但在运行时也就不再需要库文件了。其后缀名一般为 “.a”。 动态库与之相反在编译链接时并没有把库文件的代码加入到可执行文件中而是在程序执行时由运行时链接文件加载库这样可以节省系统的开销。动态库一般后缀名为 “.so”如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后gcc 就可以生成可执行文件。 gcc 默认生成的二进制程序是动态链接的这点可以通过 file 命令验证。 4. gcc选项 -static 此选项对生成的文件采用静态链接 -g 生成调试信息。GNU 调试器可利用该信息 -shared 用于生成动态库通常较小且依赖于系统中已有的动态库 Linux调试器-gdb使用
  6. 背景 程序的发布方式有两种debug模式和release模式。 Linux gcc/g出来的二进制程序默认是release模式。 要使用gdb调试必须在源代码生成二进制程序的时候, 加上 -g 选项。 2. 开始使用 gdb binFile 退出Ctrl d 或 quit 调试命令 listl 行号显示binFile源代码接着上次的位置往下列按回车每次列10行 listl 函数名列出某个函数的源代码 r 或run运行程序 n 或 next单条执行在vs里相当于F10逐过程 s 或step进入函数调用在vs里相当于F11逐语句 break(b) 行号在某一行设置断点 break 函数名在某个函数开头设置断点 info break 查看断点信息 finish执行到当前函数返回然后挺下来等待命令 print(p)打印表达式的值通过表达式可以修改变量的值或者调用函数 p 变量打印变量值相当于vs中的监视 set var修改变量的值 continue(或c)从当前位置开始连续而非单步执行程序相当于vs里按一次F5执行到第一个断点再按一次F5就执行到了第二个断点处 run(或r)从开始连续而非单步执行程序 delete breakpoints删除所有断点 delete breakpoints n删除序号为n的断点 disable breakpoints禁用断点 enable breakpoints启用断点 info(或i) breakpoints参看当前设置了哪些断点 display 变量名跟踪查看一个变量每次停下来都显示它的值 undisplay取消对先前设置的那些变量的跟踪 until X行号跳至X行 breaktrace(或bt)查看各级函数调用及参数 infoi) locals查看当前栈帧局部变量的值 quit退出gdb Linux项目自动化构建工具-make/Makefile 代码 //.PHONY:test// 总是被执行不建议这样 test:test.c// 依赖关系gcc -o test test.c// 依赖方法 .PHONY:clean clean:// clean是自定义的依赖关系右侧没有任何文件表示不依赖于任何文件rm -f test test 依赖于 test.c \(代表依赖关系所对应的目标文件test \)^代表test.c rm前的代表不会回显 原理 make是如何工作的 make会在当前目录下找名字叫 “Makefile” 或 “makefile” 的文件。如果找到它会找文件中的第一个目标文件target在上面的例子中他会找到 “test” 这个文件并把这个文件作为最终的目标文件。如果 test 文件不存在或是 test 所依赖的后面的 test.c 文件的文件修改时间要比 test 这个文件新那么他就会执行后面所定义的命令来生成 test 这个文件。 没有修改的代码只能编一次为什么呢 比较可执行程序的最近修改时间和源文件的最近修改时间.exe 先于 .c也就是目标文件比较新不需要重新编译 项目清理 像clean这种没有被第一个目标文件直接或间接关联那么它后面所定义的命令将不会被自动执行不过我们可以显示要make执行。即命令——“make clean”以此来清除所有的目标文件以便重编译。但是一般我们这种clean的目标文件我们将它设置为伪目标用 .PHONY 修饰伪目标的特性是总是被执行的。 Linux实现进度条小程序  回车换行的概念 一般我们按下Enter键电脑自动帮我们换到下一行的开头但其实中间有两个动作分别是 回车 \r 将光标移动到当前行的开头。 换行 \n 将光标移动到下一行的开头。 缓冲区 看下面一段代码 1 #include processBar.h 2 3 int main() 4 { 5 printf(hello linux); 6 7 sleep(2); 8 return 0; 9 } sleep 了两秒之后才打印出来在 sleep 期间“hello linux” 被缓冲区保存起来了程序退出时数据才被刷出来。 C程序默认打开三个输入输出流 标准输入stdin标准输出stdout标准错误stderr。 使用 fflush 1 #include processBar.h2 3 int main()4 {5 printf(hello linux);6 fflush(stdout); 7 sleep(2);8 return 0;9 } processBar.h 1 #include stdio.h2 #include string.h3 #include unistd.h4 5 #define NUM 102 //101个有效字符加上一个\06 #define Top 1007 #define BOGY 8 #define RIGHT 9 10 extern void processBar(int speed);
    processBar.c 1 #include processBar.h2 3 const char* lable|/-\;4 char bar[NUM];5 6 void processbar(int speed)7 {8 memset(bar,\0,sizeof(bar));9 int lenstrlen(lable);10 11 int cnt0;12 while(cnt Top)13 {14 //100表示预留100个空间默认右对齐带上-左对齐15 //%%表示显示%不推荐用\%(转义字符)16 printf([%-100s][%d%%][%c]\r,bar, cnt, lable[cnt%len]);// 不换行直接回车没有立即刷新17 fflush(stdout);// 立即刷新18 bar[cnt]BOGY;19 if(cnt100)20 bar[cnt]RIGHT;21 22 usleep(speed); 23 }24 printf(\n);25 }main.c 1 #include processBar.h2 3 int main()4 {5 processbar(10000); 6 return 0;7 }