为建立对Linux C的基本概念,阅读书籍《Linux C编程从入门到实践-程国刚等》与《Linux C从入门到精通-明日科技》,此为学习笔记。

Linux C-学习笔记

  • 1. Linux 基础
    • 1.1 起源与发展
    • 1.2 Linux 体系结构
    • 1.3 Linux文件系统
      • 1.3.1 文件系统结构
      • 1.3.2 文件基本属性
    • 1.4 Linux 系统启动过程
  • 2. 内存分类
  • 3. Linux C 编程、编译及调试
    • 3.1 vim
      • 3.1.1 vim 基本操作
      • 3.1.2 vim 三种模式
    • 3.2 Linux 各种编辑器比较
    • 3.3 编译器 GCC
      • 3.3.1 GCC 最基本用法:
      • 3.3.2 警告
      • 3.3.3 GCC调试
      • 3.3.4 GCC代码优化
      • 3.4 GDB 调试器安装和使用
      • 3.5 Makefile教程
    • 使用过程的报错以及解决
      • ① gcc编译时报错:filename.c:33: error: stray ‘\33’ in program
      • ② 关于可执行文件的一些操作尝试

1. Linux 基础

1.1 起源与发展

计算机系统由硬件系统和软件系统组成,软件系统的基础为操作系统。Linux系统基于GPL协议发布,该协议是GNU项目所创立开放源代码的公共许可证。

GUN (GNU`s not Unix) 是一个项目。该计划最初目标是开发一个软件丰富且可以自由使用的软件库 / 类unix操作系统,其开发出了GCC编译器、Emacs编辑器等工具,这些工具都以源代码格式发布,使用时无需支付任何费用,但这些工具的改进版和衍生产品必须遵守同样的模式进行发布,这就形成了GPL协议。接着,操作系统——Linux系统的诞生承载了整个项目。

1.2 Linux 体系结构

一个Linux操作系统由Linux内核(Kernel)、命令解释层(shell)、文件系统(File structure)等构成,内核由文件系统驱动、硬件设备驱动、内存管理模块、进程管理模块、网络管理模块组成。
Linux内核是独立于普通的应用程序的,拥有着受保护的内存空间和对硬件的所有访问权限,而这些被称为内核空间。

1.3 Linux文件系统

1.3.1 文件系统结构

Linux系统中的文件可以分为三类:普通文件、目录文件和特殊文件:
普通文件:数据和程序,二进制流,不包含任何特定的结构;
目录文件:一种结构,允许不同的文件和目录放在一起;
特殊文件:包含多种类型,和不同进程之间的通信、计算机和外部设备的通信有关。

Linux系统中应用程序有两种类型的文件:脚本文件可执行文件

Linux中“./”在系统文件中表示绝对路径的意思。

linux系统中,所有的文件与目录都是由根目录 / 开始,不是以/开头的就是相对路径;

1、“.”表示当前目录,也可以用“./”表示;

2、“…”表示上一级目录,也可以用“…/”表示;

3、“~” 代表用户自己的宿主目录;

4、“/”处于Linux文件系统树形结构的最顶端,我们称它为Linux文件系统的root,它是Linux文件系统的入口。

Linux操作系统中的所有文件放在一个大的树形结构中。树的根是一个单独的目录 (root), 用斜杠 "/"表示

  • /bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
  • /boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /dev :dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
  • /etc:etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
  • /home:用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
  • /lib:lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
  • /media:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
  • /selinux:这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
  • /opt:opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
  • /proc:proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
  • /sbin:s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。
  • /srv:该目录存放一些服务启动之后需要提取的数据。
  • /tmp:tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。
  • /usr:usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
  • /usr/src:内核源代码默认的放置目录。
  • /var:var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。
  • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
  • /bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。

值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给 root 使用的指令。

1.3.2 文件基本属性

为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:

  • chown (change ownerp) : 修改所属用户与组。
  • chmod (change mode) : 修改用户的权限。

使用== ll == 或者 == ls –l ==命令来显示一个文件的属性以及文件所属的用户和组,如

[user1@localhost /]$ ls -l
total 98
dr-xr-xr-x.   2 root root  4096 Oct 25 03:38 bin
dr-xr-xr-x.   5 root root  1024 Oct 25 02:43 boot
drwxr-xr-x.  18 root root  3760 Oct 28 02:31 dev
drwxr-xr-x. 102 root root 12288 Oct 28 02:31 etc
drwxr-xr-x.   3 root root  4096 Oct 25 02:44 home
dr-xr-xr-x.  10 root root  4096 Oct 25 02:40 lib
dr-xr-xr-x.   9 root root 12288 Oct 25 03:37 lib64
drwx------.   2 root root 16384 Oct 25 02:39 lost+found
drwxr-xr-x.   2 root root  4096 Sep 23  2011 media
drwxr-xr-x.   3 root root  4096 Oct 25 02:45 mnt
drwxr-xr-x.   3 root root  4096 Oct 25 02:46 opt
dr-xr-xr-x. 154 root root     0 Oct 28 02:31 proc
dr-xr-x---.   2 root root  4096 Oct 25 02:44 root
dr-xr-xr-x.   2 root root 12288 Oct 25 03:38 sbin
drwxr-xr-x.   7 root root     0 Oct 28 02:31 selinux
drwxr-xr-x.   2 root root  4096 Sep 23  2011 srv
drwxr-xr-x.  13 root root     0 Oct 28 02:31 sys
drwxrwxrwt.  18 root root  4096 Oct 28 02:31 tmp
drwxr-xr-x.  13 root root  4096 Oct 25 02:39 usr
drwxr-xr-x.  21 root root  4096 Oct 25 02:42 var
  • 在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
    当为 d 则是目录
    当为 - 则是文件;
    若是 l 则表示为链接文档(link file);
    若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
    若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
  • 接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。

更改命令以及解释:
https://www.runoob.com/linux/linux-file-attr-permission.html

1.4 Linux 系统启动过程

https://www.runoob.com/linux/linux-system-boot.html

常见linux基础操作命令详见另一篇博客,此文只展示为运用于一些编程/调试过程而使用的命令。

2. 内存分类

动态内存和静态内存:

  • 两种不同的内存分配方式。静态内存的分配在程序开始编译时完成,不占用CPU资源;动态内存分配在程序运行时其分配与释放都占用CPU资源。
  • 静态内存在上分配;动态内存在上分配。
  • 动态内存分配需要指针和引用数据类型的支持,静态内存不需要。
  • 静态内存在编译前就已确定了内存块大小,由编译器控制;动态内存按需分配,由程序员控制。
  • C语言中局部变量存在栈里,局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放之。全局变量存静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。

堆和栈的区别:

一、堆栈空间分配区别:

1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;

2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

二、堆栈缓存方式区别:

1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;

2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

堆:内存中,存储的是引用数据类型,引用数据类型无法确定大小,堆实际上是一个在内存中使用到内存中零散空间的链表结构的存储空间,堆的大小由引用类型的大小直接决定,引用类型的大小的变化直接影响到堆的变化

栈:是内存中存储值类型的,大小为2M,超出则会报错,内存溢出

三、堆栈数据结构区别:

堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。
特点:先进后出

什么是“堆”,“栈”,“堆栈”,“队列”,它们的区别
https://www.cnblogs.com/guoxiaoyan/p/8664150.html

3. Linux C 编程、编译及调试

Linux C 开发工具:

  • 编辑工具:vim 和 emacs 等文本编辑程序;
  • 编译工具:编译指 将C语言源代码转换为可执行文件代码的过程。最常用 GCC。
  • 调试工具:常用 gdb
  • 项目管理和维护工具:make 等是一种控制编译 或 重复编译软件的工具,还能自动管理软件编译的内容、方式和时机;
  • 集成开发环境 (IDE): CodeBlocks, CodeLite, Anjuta, Eclipse等。

3.1 vim

3.1.1 vim 基本操作

启动vim初始化界面: 在终端中输入命令“vim”
退出 vim: 首先按下Esc键回车后进入命令行模式,然后输入“:”,此时光标会停留在最下面的一行,再输入“q”,最后回车就可以退出。

3.1.2 vim 三种模式

  • 一般模式:一进入vim就是一般模式。该模式下只能输入指令,不能输入文字。這些指令可能是让光标移动的指令,也可能是删除指令或取代指令。
  • 编辑模式:按 i就会进入编辑模式(插入模式),此时在状态列会有 INSERT 字样。在该模式下才可以输入文字,按Esc 又会回到命令模式。
  • 底行模式:按冒号 “:”就会进入底行模式,此时左下角会有一个冒号,等待输入命令。按Esc返回命令模式。

纠错:
vim/vi E348:No string under cursor
故障原因:
提示是没有按“i”进入插入模式。

解决办法:

  1. 再按一下“ESC”,即可回到命令行模式,输入按一下“:”冒号键进入底行模式。
    输入:
  2. : w filename (将文章以指定的文件名filename保存)
    : wq (输入「wq」,存盘并退出vim)
    : q! (输入q!, 不存盘强制退出vim)


3.2 Linux 各种编辑器比较

https://www.cnblogs.com/alexzhang92/p/9368681.html

3.3 编译器 GCC

Linux系统下的GCC是GUN推出的一款功能强大、性能优越的编译器。其可以在多种硬件平台上编译出可执行程序的编译器,执行效率与一般的编译器相比效率平均高出 10% ~ 20%。

3.3.1 GCC 最基本用法:

gcc [options] [filename]

C++编译器 G++

g++ -[options] [filename]

options 是编译器所需要的参数,filename 给出相关文件名称。参数有:

  • -c 只编译,不链接为可执行文件。编译器只是由输入的 .c等源代码文件生成 .o 为后缀的目标文件,通常用于编译不包含主程序的子程序文件
  • -o output_filename 确定输出文件名称为 “output_filename” 该名称不可与源文件同名。若不给出此选项,GCC给出预设可执行文件名称 “a.out”;
  • -g 产生符号调试工具(GUN 的 GDB)所必要的符号资讯。想调试则必加此选项
  • -O 优化编译、链接;

3.3.2 警告

当GCC编译不符合 ANSI/ISO C语言标准的源代码时,加上 -pedantic选项,则在使用了扩展语法的地方会产生警告信息。除此之外,- Wall 能产生更尽可能多的警告信息,加上 -Werror 将要求GCC将所有的警告当成错误进行处理(在产生警告的地方停止编译,迫使程序员修改代码),这在使用自动编译工具 make等 时非常有用。

In function 'funcname': filename: : ISO C89 does not support ' long long'

main() 函数的返回值应被声明为 int,且应在函数结尾有 “return0;” 而非 void。

3.3.3 GCC调试

-g 调试级别有三:

  • -g1 只能用于回溯跟踪和堆栈转储。回溯跟踪指的是监视程序在运行过程中的函数调用历史;堆栈转储是一种以原始十六进制格式保存程序执行环境的方法;
  • -g2 (默认)产生的调试信息包括 扩展的符号表、行号、局部或外部变量信息;
  • -g3 包括 g2所有调试信息,以及源代码中定义的宏。

3.3.4 GCC代码优化

代码优化指的是 编译器通过分析源代码,找出其中尚未达到最优的部分,对其重新组合,目的是为改善程序的执行性能。
GCC通过命令的 -On 选项来选择优化级别:

  • -O (-O1) 可以告诉GCC同时减小代码的长度和执行时间。在这一级别上能进行的优化类型虽然取决于目标处理器,但一般包括线程跳转(Thread Jump)和延迟退栈(Deferred Stack Pops);
  • -O2 除了 -O1的功能,还有一些额外工作如处理器指令调度;
  • -O3 还包括循环展开一些与处理器特性相关的工作;

3.4 GDB 调试器安装和使用

1,检查Linux是否安装了 gdb:

# gdb -v

2,由于为了避免安装过程中因为权限不够导致的错误或失败,在此切换到了 管理员权限下:

./
[lei@localhost ~]$ su root
Password:
[root@localhost lei]#

3,直接在linux系统中用wget命令下载,会下载到当前目录下:

wget http://ftp.gnu.org/gnu/gdb/gdb-111.tar.gz

4,将压缩包移到Download目录下,进入该目录,解压:

rm gdb-qqq.tai.gz Download/
tar -zxvf 压缩文件名.tar.gz

(小插曲:一刚开始用了命令 tar -x,导致解压的时候等待时间太长,我不耐烦想结束进程,却摁了 ctrl + Z, 导致进程只是被暂停,用 ps -ef 看该进程仍然存在,要彻底删掉它:

[root@localhost Downloads]# ps -ef | grep tar
lei        2392      1  0 13:56 ?        00:00:07 /usr/bin/pulseaudio --start --log-target=syslog
root       4198   4033  0 18:26 pts/0    00:00:00 tar -x
root       4199   4033  0 18:26 pts/0    00:00:00 tar -x gdb-11.1.tar.gz
root       4254   4033  0 18:40 pts/0    00:00:00 grep tar
[root@localhost Downloads]# kill 4198
[root@localhost Downloads]# ps -ef | grep tar
lei        2392      1  0 13:56 ?        00:00:07 /usr/bin/pulseaudio --start --log-target=syslog
root       4198   4033  0 18:26 pts/0    00:00:00 tar -x
root       4199   4033  0 18:26 pts/0    00:00:00 tar -x gdb-11.1.tar.gz
root       4254   4033  0 18:40 pts/0    00:00:00 grep tar
// 说明 kill 不管用,加了个选项:
[root@localhost Downloads]# kill -9 4198
[root@localhost Downloads]# ps -ef | grep tar
lei        2392      1  0 13:56 ?        00:00:07 /usr/bin/pulseaudio --start --log-target=syslog
root       4199   4033  0 18:26 pts/0    00:00:00 tar -x gdb-11.1.tar.gz
root       4254   4033  0 18:40 pts/0    00:00:00 grep tar

拓展:

kill -9 发送SIGKILL信号给进程,将其终止,但对于以下两种情况不适用:
1.该进程是僵尸进程(STAT z),此时进程已经释放所有的资源,但是没有被父进程释放。僵尸进程要等到父进程结束,或者重启系统才可以被释放。
2.进程处于“核心态”,并且在等待不可获得的资源,处于“核心态 ”的资源默认忽略所有信号。只能重启系统。
kill 只能杀死处于用户状态的进程。
https://blog.csdn.net/lemontree1945/article/details/79169178

)

5,生成makefile文件 并正式安装 gdb:

[root@localhost Downloads]# cd gdb.11.1
[root@localhost gdb.11.1]# ./configure
[root@localhost Downloads]# make
//编译中出现了错误,极有可能是所用的 GCC 编译器版本过低导致的,可尝试升级 GCC 版本后再重新执行 make 命令。
[root@localhost Downloads]# sudo make install

Linux 命令详解(三)./configure、make、make install 命令https://www.cnblogs.com/tinywan/p/7230039.html

6,查看是否安装成功

GDB下载和安装教程-参考
http://c.biancheng.net/view/8130.html

3.5 Makefile教程

http://c.biancheng.net/makefile/

使用过程的报错以及解决

① gcc编译时报错:filename.c:33: error: stray ‘\33’ in program

各种查帖子,总结了可能的原因:

  • 文件中有含有中文字符;
  • 可能按键 ctrl + shift 将半角换成了全角;
  • 空格,回车等字符编码的问题:简单的解决方式:用gedit打开文件, 复制’\xxx’字符,使用sed命令,将‘\xxx’替换成目标字符

补充:
gedit 是一种文本编辑器, VMWare + CentOS 的Linux 环境下自带了该编辑器。只需要在 shell 中输入 gedit 即可调用出来;
linux sed命令详解 :https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html

  • 在非 insert 模式下输入了类似 回车、换行、ctrl + xxx 键等,向文本插入了非法字符,导致编译出错,无法进行。

② 关于可执行文件的一些操作尝试

// 不加参数 -o 则以 a.out 默认方式命名
[lei@localhost mywork]$ gcc -pedantic vimlearn.c
// 以第三级别看最详细的调试信息
[lei@localhost mywork]$ gcc -g3 vimledebug vimlearn.c -o vimle
[lei@localhost mywork]$ ls
a.out  vimle vimlearn.c  vimledebug// 查看可执行文件,只能在terminal看到一堆符号
[lei@localhost mywork]$ vi vimledebug
// 欲删除可执行文件
[lei@localhost mywork]$ rm vimleledebug
rm: cannot remove `vimleledebug': No such file or directory
// 运行可执行文件
[lei@localhost mywork]$ ./a.out
hello world[lei@localhost mywork]$ ./vimledebug
hello world[lei@localhost mywork]$ ./vimle
hello world[lei@localhost mywork]$

Linux C-学习笔记(一)相关推荐

  1. linux系统管理学习笔记之三----软件的安装

    linux系统管理学习笔记之三----软件的安装 2009-12-29 19:10:02 标签:linux 系统管理 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  2. linux系统管理学习笔记之一-------linux解压缩命令

    linux系统管理学习笔记之一-------linux解压缩命令 2009-12-29 11:52:55 标签:linux tar [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接 ...

  3. 操作系统进程学习(Linux 内核学习笔记)

    操作系统进程学习(Linux 内核学习笔记) 进程优先级 并非所有进程都具有相同的重要性.除了大多数我们所熟悉的进程优先级之外,进程还有不同的关键度类别,以满足不同需求.首先进程比较粗糙的划分,进程可 ...

  4. linux系统管理学习笔记之八---进程与作业的管理

    linux系统管理学习笔记之八---进程与作业的管理 2010-01-05 13:00:42 标签:linux 进程 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  5. linux系统管理学习笔记之八---linux文件与目录的管理及权限

    linux系统管理学习笔记之八---linux文件与目录的管理及权限 2010-01-05 09:00:49 标签:权限 管理 文件目录 linx [推送到技术圈] 版权声明:原创作品,允许转载,转载 ...

  6. 韩顺平Linux教程学习笔记

    Linux系统学习笔记   新装了deepin v23系统,结果磁盘没设置好,玩崩了,百度半天修复不了,看看韩顺平老师的Linux操作课程,做做笔记(只记录对自己有用的).   B站网址 基础篇·Li ...

  7. Linux操作系统学习笔记【入门必备】

    Linux操作系统学习笔记[入门必备] 文章目录 Linux操作系统学习笔记[入门必备] 1.Linux入门 2.Linux目录结构 3.远程登录 3.1 远程登录Linux-Xshell5 3.2 ...

  8. 【韩顺平Linux】学习笔记1

    [韩顺平Linux]学习笔记1 一.网络连接的三种方式 二.虚拟机克隆 三.虚拟机快照 四.虚拟机迁移和删除 五.VMtools 六.Linux目录结构 七.远程登录和文件传输 一.网络连接的三种方式 ...

  9. Linux+javaEE学习笔记之Linux网络环境配置

    Linux+javaEE学习笔记之Linux网络环境配置 网络知识简单介绍: Ip地址是:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物 ...

  10. Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)

    开发板:Zynq7030数据采集板 PC平台:Ubuntu-18.04 + MobaXterm 开发环境:Xilinx Vivado + SDK -18.3 交叉编译工具:arm-linux-gnue ...

最新文章

  1. c++引用与指针的区别
  2. Mybatis中trim的使用
  3. 安装 SQL Server 2005 时出现性能计数器要求安装错误的解决办法
  4. SpringBoot项目中获取yml文件的属性时实体属性类出现Spring Boot Configuration Annotation Processor not found in classpath
  5. LeetCode简单题目(#27 #28 #35 #38)-2019.10.23-4道
  6. 管道pipe与dup结合使用,应用实例
  7. linux环境下grep的相关含义
  8. C++ 中的sort()排序函数用法
  9. 【Https】Spring RestTemplete支持Https安全请求
  10. 计算机-库win10,Win10游戏运行库合集32/64位 官方最新版
  11. ASCII码字符对照表
  12. TCP和UDP区别和优缺点
  13. Django在Terminal中python manage.py startapp myapp报name ‘os‘ is not defined
  14. 第五章. 可视化数据分析图表—常用图表的绘制2—直方图,饼形图
  15. linux打开python3_号外:RIDE 可以在 linux+python3 的环境中运行啦!
  16. 微信公众号之在图片上添加热点链接
  17. 股权、期权和原始股傻傻分不清楚?一文帮你安排的明明白白!
  18. pc模式 华为mate30_华为Mate30系列10个隐藏黑科技
  19. LabVIEW使用POST调用有道翻译
  20. 瑞萨单片机RL78-时钟

热门文章

  1. python中 {0:2.2f}与{1:2.2f}的区别
  2. php 星际争霸 面向对象,星际争霸之php面向对象(一)
  3. Android BLE HIDS Data ,从问询DB 到写入Android 节点的flow之二
  4. windows 查看/清除DNS解析记录
  5. 遥控汽车的编程c语言,智能小车循迹、避障、红外遥控C语言代码.docx
  6. ant-design-vue中a-date-piker日期选择器的使用/全局汉化(详细)
  7. 从‘心’出发,乐跑向前——德州站健心跑公益活动盛大开跑
  8. 苹果MacBook Pro usb连接iPhone反复重连解决方法
  9. 观成科技荣获中国网络安全产业联盟 “先进会员单位”并晋升理事单位
  10. Python绘制美国队长盾牌