Linux操作系统安装
安装教程:硬盘安装Ubuntu,重装Linux系统
如果开机的时候,没有出现选择哪个系统的界面,参照以下文章解决(2.6)
https://luozm.github.io/win-ubuntu
https://www.xiaoyuanjiu.com/10832.html
如果出现Ubuntu引导错误,”Minimal BASH-like line editingis supported…”,参照以下文章解决
http://www.voidcn.com/article/p-vbifqnft-beo.html
https://linux.cn/article-5909-1.html
解决安装Linux系统后导致window系统时间异常的问题
#安装时间校准服务$ sudo apt-get install ntpdate#从time.windows.com获取本地时间$ sudo ntpdate time.windows.com#同步时间到硬件$ sudo hwclock --localtime --systohc
vim编辑器
sudo apt-get update // 更新源sudo apt-get install vim // 安装vim编辑器
apt:Advanced Packaging Tool
命令模式:
i:进入编辑模式
:sp max.c:新开一个max.c窗口
:set nu:显示行号
:[num]:跳转到某一行
[num]:从当前行向下跨越多少行
ctrl + w + 上箭头:跳转到上面窗口
ctrl + w + 下箭头:跳转到下面窗口
替换
:{作用范围}s/{目标}/{替换}/{替换标志}
例如:%s/foo/bar/g会在全局范围(%)查找foo并替换为bar,所有出现都会被替换(g)

我的Vim配置:~/.vimrc
syntax onset showcmdset autoindentset expandtabset softtabstop=4
注意:配置Makefile文件的时候,需要默认的Tab,这时先Ctrl+v,然后按Tab,就还用使用默认Tab。
Vim 配置入门
gcc编译器
// 安装sudo apt install gcc// 使用gcc test.c // 编译后输出a.out文件(默认)gcc test.c -o test.out // 编译后输出test.out文件gcc -c max.c -o max.o // 单独编译max.c文件,输出文件为max.o
gcc:GNU C Compiler C编译器 g++:GNU C++ Compiler C++编译器
make工具
- make工具可以将大型的开发项目分成若干个模块
- make工具可以很清晰和快捷的整理源文件
// 安装sudo apt install make
// main.c#include <stdio.h>#include "max.h"#include "min.h"int main(){int a1=33;int a2=21;int maxNum=max(a1,a2);int minNum=min(a1,a2);printf("the max value is %d\n",maxNum);printf("the min value is %d\n",minNum);return 0;}// max.hint max(int a, int b);// max.cint max(int a,int b){return a>b?a:b;}// min.hint min(int a, int b);// min.cint min(int a,int b){return a>b?b:a;}
// Makefile#this is make filemain.out:max.o min.o main.cgcc max.o min.o main.c -o main.outmax.o:max.cgcc -c max.cmin.o:min.cgcc -c min.c
main函数的return
// main.c#include <stdio.h>int main(int argv,char* argc[]){printf("hello world!\n");return 0;}
思考一下:main函数中,为什么要return 0?reutrn 其他不行吗?
gcc main.c -o main.out // 生成main.out文件./main.out // 执行mian.out文件处理hello world // 显示结果:hello worldecho $? // 查看上一次的执行结果是否正常执行,如果正常返回0,反之返回错误代码0 // 显示0,说明执行正常./main.out && ls // 先执行./mian.out,如果正常再执行lshello world! // ./main.out的执行结果,正常main.c main.out // ls的执行结果
从以上结果中可以看到,mian.out执行后的结果代码是0,说明正常执行了。那这个0是哪里来的呢?从main函数中可以看到,就是 return 0; 这个处理,那我们试着把返回值设置成其他值。
// main.c#include <stdio.h>int main(int argv,char* argc[]){printf("hello world!\n");return 104;}
gcc main.c -o main.out // 生成main.out文件./main.out // 执行mian.out文件处理hello world // 显示结果:hello worldecho $? // 查看上一次的执行结果是否正常执行,如果正常返回0,反之返回错误代码104 // 显示104,说明执行异常./main.out && ls // 先执行./mian.out,如果正常再执行lshello world! // ./main.out的执行结果
可以看到,./main.out执行之后,ls并没有执行,这是因为./main.out的执行结果是异常的。
所以,main函数的 return 0;不是随便写的,是有意义的,代表了main函数正常执行。当然,我们可以根据业务,在出现异常的时候,返回相应的异常代码。
main函数中的参数
// main.c#include <stdio.h>int main(int argv,char* argc[]){printf("argv is %d\n",argv);int i;for(i=0;i<argv;i++){printf("argc[%d] is %s \n",i,argc[i]);}return 0;}
gcc main.c -o main.out // 生成main.out文件./main.out // 执行main.out处理argv is 1 // 执行结果1argc[0] is ./main.out // 执行结果2./main.out -l -a -p // 执行main.out处理,带参数argv is 4 // 执行结果1argc[0] is ./main.out // 执行结果2argc[1] is -l // 执行结果3argc[2] is -a // 执行结果4argc[3] is -p // 执行结果5
以上应该能很清楚的看到,main函数中两个参数的含义。第一个参数表示有几个命令,第二个命令表示这几个命令分别是什么。./main.out和linux的ls命令一样,都是可以带参数的。为什么c语言与linux如此相似?连他们命令参数的设置方法都是一样的?这是因为linux本身就是用C语言编写的。linux源自unix,unix和C语言是同一个人(丹尼斯·里奇)发明的。大神,膜拜。
输入/输出/错误流的重定向
#include <stdio.h>int main(){printf("input the int value i:\n");int i,j;scanf("%d",&i);printf("input the int value j:\n");scanf("%d",&j);printf("i+j=%d\n",i+j);return 0;}
:输出重定向,在文件尾部追加
chenys@chenys-VirtualBox:~/workspace/les4$ ./main.out >> log.txt3344chenys@chenys-VirtualBox:~/workspace/les4$ ./main.out >> log.txt5566chenys@chenys-VirtualBox:~/workspace/les4$ lslog.txt main.c main.outchenys@chenys-VirtualBox:~/workspace/les4$ cat log.txtinput the int value i:input the int value j:i+j=77input the int value i:input the int value j:i+j=121:输出重定向,覆盖文件内容
chenys@chenys-VirtualBox:~/workspace/les4$ ./main.out > log.txt100200chenys@chenys-VirtualBox:~/workspace/les4$ cat log.txtinput the int value i:input the int value j:i+j=300
<:输入重定向,没有<<因为输入必定只有从一个文件中来
chenys@chenys-VirtualBox:~/workspace/les4$ cat input.txt2354chenys@chenys-VirtualBox:~/workspace/les4$ ./main.out < input.txtinput the int value i:input the int value j:i+j=77
1>XX:输出流的重定向(正常)
2>XX:错误流的重定向
chenys@chenys-VirtualBox:~/workspace/les4$ ./main.out 1>ok.txt 2>ng.txt70chenys@chenys-VirtualBox:~/workspace/les4$ lsinput.txt main.c main.out ng.txt ok.txtchenys@chenys-VirtualBox:~/workspace/les4$ cat ok.txtinput the int value i:input the int value j:chenys@chenys-VirtualBox:~/workspace/les4$ cat ng.txtj!=0
