您可以通过左右滑屏查看更多笔记内容。。
stdio
:标准输入输出流;
\n
换行;
步骤:
cd ~ /workspace/
–>cd lens1
–>touch a.c
–>vi a.c
进行编写如下代码:
导入stdio (标准输入输出流);
编写main方法进行打印;
代码:
#include <stdi0.h>
int main(){
printf("hello word!"\n);
return 0;
}
使用wq
进行保存退出,进行输出:
输入:cc.a.c ,
输入ls
查看,默认输出了一个a.out 文件;
ls -l
查看文件权限; r-read 可读;w-write 可写 ;x 可执行;
执行a.out 文件:./a.out
输出:”hello word“ (./
:当前目录下)
%d
:表示把数据按十进制整型输出;vi
:set nu
:打开行号;
在vim 中同时创建多个源文件,步骤如下:
在workspace下创建一个新的文件夹 mkdir lens2
;
首先编写一个hello.c文件: hello.c
vi.hello.c进入编辑模式:
#include <stdio.h>
int max(int a,int b){
if(a>b){
return a;
}else{
return b;
}
}
int main(){
int a=22;
int b=33;
int maxNum=max(a,b);
printf("max=%d",maxNum);
return 0;
}
wq保存后,可查看结果` gcc hello.c--ls-->./a.out-->max=33
再次进入vi.hello.c
命令模式下输入::sp max.c
创建一个名为max.c的文件;
使用Ctrl W+上下箭头
可切换文件位置,选在在哪里编辑;
查看max()所占行数,8行,可将鼠标放在int max()位置处,按8dd
可实现将max()函数进行剪切,然后使用Ctrl W+上箭头
切换到max.c文件编辑位置,按p
进行粘贴;
wqa
进行保存所有并退出;
gcc max.c hello.c -o main.out
此时可查看ls
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens2$ ls
a.out hello.c main.out max.c
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens2$ ./main.out
max=33lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens2$ ``
一样可以得到结果;此时的max()函数在max.c文件中;
需要在hello.c中进行声明max()函数:
#include "max.c"
(include <系统中存在的库>;include "当前目录下寻找对应的")系统中存在的库>
即可使用./a.out得到最终的输出结果;
gcc -c max.c
可以生成一个名为max.o
的文件;gcc -c max.c -o m1.o
并给他命名为m1.o;max.o
为可读可写不可执行;文件进行了编译,编译器对源代码进行了编译,编译成了计算级可识别的二进制;cp max.c min.c
拷贝max.c 文件,名为min.c;gcc -c min.c -o min.o
进行编译;vi max.h
–int max(int a,int b);
vi min.h
–int min(int a,int b);
#include "max.h"
#include "min.h"
gcc max.o min.o hello.c
–>./a.out
进行编译得到结果;当有多个.o文件时,进行编译,需要gcc多个.o,很麻烦,为了更方便的编译,使用make指令;
make 工具,可以将大型的开发项目,分成若干个模块,更加清晰、快捷的整理、编译源文件;
makeFile的编写步骤:
首先将所有的.o
文件进行删除 :rm *.o
;
查看是否有make :make -v
;若没有,则进行下载sudo apt install make
;
vi makefile
创建并开始便捷makefile文件;
添加注释:#this is make file;
# 后内容被忽略;
#this is make file
hello.out:max.o min.o hello.c
gcc max.o min.o hello.c -o hello.out
max.o:max.c
gcc -c max.c
min.0:min.c
gcc -c min.c
-o hello.out
:是将自动生成的 .out 文件进行命名;hello.out
文件,需要依赖于max.o min.o hello.c
,而其中只有hello.c
文件是存在的,所以又需要将另两个没有的.o
文件进行编译生成;wq
保存退出,输入make
进行生成makefile 文件,使用ls查看,结果如下,
hello.out hello.c makefile max.c max.h max.o min.c min.h min.o
./hello.out
查看结果,也可得到最小值和最大值:
当我们只改动gcc max.o min.o hello.c -o hello.out
这一行代码时,再次make
则发现,程序只执行了gcc max.o min.o hello.c -o hello.out
,也就是说:
已经编译过的文件,如果没有修改,则不会重复编译,节省了时间;
当同时执行两部操作时,通过&&连接,只有第一条指令成功执行(返回值为0),才会执行下一条执行;
通过echo $?
查看执行命令是否成功:如果返回值是0,就是执行成功;如果是返回值是0以外的值,就是失败。
验证步骤:
新建一个文件lens3 :mkdir lens3
;
在lens3下创建一个文件”main.out“:vi main.c
;
#include <stdio.h>
int main(int argv,char* argc[])
{
printf("hello word\n");
return 0;
}
直接执行两部操作,通过&&链接:gcc main.c -o main.out && ./main.out
得到结果:”hello word“;
查看是否执行成功:echo $?
输出为0,代表执行成功;
将”main.c“中的返回值进行修改:return 101;
重新编译:gcc main.c -o main2.out && ./main2.out
–>得到结果还是”hello word“;echo $?
查看执行结果,为101,指令没有执行成功;
再执行./main2.out && ls
–>得到结果还是”hello word“,没有执行ls ;
argc、argv的具体含义
main( int argc, char* argv[] ) 中 第一个参数,int型的argc,为整型,用来统计程序运行时发送给main函数的命令行参数的个数,在VS中默认值为1。 第二个参数,char*型的argv[],为字符串数组,用来存放指向的字符串参数的指针数组,每一个元素指向一个参数。各成员含义如下: argv[0]指向程序运行的全路径名 argv[1]指向在DOS命令行中执行程序名后的第一个字符串 argv[2]指向执行程序名后的第二个字符串 argv[3]指向执行程序名后的第三个字符串 argv[argc]为NULL ./m3.out
举例验证:
新建一个main2.c
文件vi main2.c
;
编辑内容:
include <stdio.h>
int main(int argv,char* argc[])
{
printf("argv is %d\n",argv);
int i;
//不可以直接在for循环中声明变量使用,会报错;
for(i=0;i<argv;i++){
printf("argc[%d] is %s\n",i,argc[i]);//%s是打印一个字符串
}
return 0;
}
--wq保存并推出
gcc main3.c -o m3.out
进行编译,然后使用ls
查看结果
当输入:./m3.out as asf af
时:得到入如下结果:
argv is 4
argc[0] is ./m3.out
argc[1] is as
argc[2] is asf
*表达含义:argv is 4--表示程序运行时发送给了”main“4个参数;
argc[0]/[1]/[2]--表示每个参数的值;
stdin
输入流:默认根据键盘输入;
stdout
输出流:默认根据显示器输出;
stderr
错误流
举例验证:
#include <stdio.h>
int main(){
//printf("please input the value a :\n ")
fprintf(stdout,"please input the value a :\n ");
int a;
fscanf(stdin,"%d",&a);
if(a<0){
fprintf(stderr,"the value must>0");
return 1;
}
return 0;
}
wq-->gcc cio.c-->./a.out-->
执行结果: lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens4$ ./a.out please input the value a : 3 lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens4$ ./a.out please input the value a :
-1 the value must>0lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens4$ vi cio.c lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens4$
“1»“输出流重定向,在原来的基础上追加新得内容;其中1可以不加
”>“输出流重定向,覆盖原来的内容,只增加本次添加的新内容;
“2»“错误流重定向,错误内容;
”<“输入流重定向;
mkdir lens5-->cd lens5-->vi main.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;
}
wq-->gcc main.c-->ls./a.out
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ ./a.out
input the int value i:
2
input the int value j:
3
i+j=5
测试输出流重定向及”»“与”>“区别;
./a.out 1»a.txt
./a.out >a.txt
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ ./a.out 1>>a.txt
3
4
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ ls
a.out a.txt main.c
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ cat a.txt
input the int value i:
input the int value j:
i+j=7
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ ./a.out >>a.txt
3
6
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ cat a.txt
input the int value i:
input the int value j:
i+j=7
input the int value i:
input the int value j:
i+j=9
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ ./a.out >a.txt
6
7
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ cat a.txt
input the int value i:
input the int value j:
i+j=13
首先新建一个文件可以存放提前要输入的内容:vi input txt
输入两个数字6/8
./a.out <input.txt
可直接得到输出的结果:
input the int value i:
input the int value j:
i+j=14
首次增加标准错误流
#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);
if(j!=0){
printf("i/j=%d\n",i/j);
}else{
fprintf(stderr,"j!=0\n");
return 1;
}
return 0;
}
wq-->cc main.c-->ls-->./a.out
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ ./a.out
input the int value i:
1
input the int value j:
5
i/j=0
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ ./a.out
input the int value i:
4
input the int value j:
0
j!=0
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ ./a.out 1>t.txt 2>f.txt
4
0
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ ls
a.out f.txt input main.c t.txt
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ cat t.txt
input the int value i:
input the int value j:
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ cat f.txt
j!=0
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ ./a.out 1>t.txt 2>f.txt <input.txt
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ ls
a.out f.txt input main.c t.txt
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ cat f.txt
bash: input.txt: 没有那个文件或目录
lixuehe@lixuehe-ThinkPad-T420:~/workspace/lens5$ cat t.txt //输入流无结果
ls 查看当前目录;
ls/ 查看根目录;
ls /etc/ 查看etc目录下的内容;
ls/etc/ | grep ab 查看etc 下所有包含ab 的文件; |
ps -e 当前运行的进程;
ps -e | grep ssh 当期进程有无包含ssh 的进程,如果有证明已经启动ssh ; |
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问