在windows系统中使用ubuntu虚拟机进行linux开发
1、1: 熟悉ubuntu操作界面
1) 打开vmWare, 打开虚拟机
2) 运行虚拟机,第一次需要选择“我已复制此虚拟机”
3) 熟悉简单的命令
Ctrl + ALT + T 可以得到新的终端窗口
(1)pwd 显示完整目录
(2)ls list 列举出指定目录下的内容或者是查看文件的信息
gec@ubuntu:~$ ls 默认是查看当前目录下的内容
等价于 ls ./
gec@ubuntu:~$ ls /home 查看/home目录下的内容
ls -a 列举出指定目录下的全部内容,包括隐藏文件(以.开头的)
ls -l 列举出指定目录下的详细信息,包括文件的类型、文件的权限等信息
ls -al
(3)clear 清空屏幕
(4)mkdir 创建一个工作目录
gec@ubuntu:~$ mkdir gz1812
就有了这么一个工作目录 /home/gec/gz1812
(5)cd change directory切换目录
在当前位置gec@ubuntu:~$
cd /home/gec/gz1812 (完整目录、绝对路径)
cd ./gz1812 (相对路径,当前目录的gz1812)
cd gz1812 (默认是当前目录的gz1812)
常见错误: No such file or directory 找不到对应的目录或者文件,
原因: 1:没有弄清楚自己的位置
2:输入文件名时候输错了



2、(6)使用【tab】键自动补齐,可以避免长命令时候错误的发生
(7)使用上键和下键对历史命令进行选择
(8)仅仅创建一个普通文件
touch filename
(9) rm 删除命令 remove
rm filename
rm dirname -r
(10) mv 文件重命名或者文件移动 move
mv main1-c main.c (把main1-c重命名为main.c)
mv main1-c /home/gec (把main1-c移动到/home/gec目录下)
mv dir1 dir2 (如果dir2是存在的, 就是把dir1移动到dir2下;
如果dir2是不存在的,就把dir1重命名为dir2)
3、(11) cp 复制命令 copy
cp filename new_path&name
cp dirname1 dirname2 -r
(12) man 用户手册 提供帮助
查看cp命令的帮助文档
man cp
(13) 新建文件并开始编辑或者是编辑已存在文件
vim 或者 vi
1)进入文件后,默认是出于命令模式,
2)需要用切换到编辑模式(输入模式)
键入 i a o 这3个按键可以切换
3)开始输入代码
4)退出输入模式,返回到命令模式
按【ESC】键返回到命令模式
在命令模式键入 冒号+w表示保存
:w 保存
:w newname 另存、
:wq 保存并退出
:q! 强制退出
(14) gcc编译器
常用写法: gcc -o 目标文件 所有依赖的文件(.c)
Linux中整个编译过程分4步完成
1) 预处理 把所有的#开头的内容都替换掉
#include #define #ifdef...#endif
gec@ubuntu:~/gz1812/0409$ gcc -E -o target.i main.c
gec@ubuntu:~/gz1812/0409$
gec@ubuntu:~/gz1812/0409$ file target.i
target.i: C source, ASCII text
2) 编译 检查一个文件的语法,得到汇编文件
gec@ubuntu:~/gz1812/0409$ gcc -S -o target.s main.c
gec@ubuntu:~/gz1812/0409$ file target.s
target.s: assembler source, ASCII text
3) 汇编 检查外部调用声明和全局变量有没有问题
gec@ubuntu:~/gz1812/0409$ gcc -c -o target.o main.c
gec@ubuntu:~/gz1812/0409$
gec@ubuntu:~/gz1812/0409$
gec@ubuntu:~/gz1812/0409$ file target.o
target.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not strip
4) 链接 检查是否所有的外部调用声明都有定义
gec@ubuntu:~/gz1812/0409$gcc -o target main.c
gec@ubuntu:~/gz1812/0409$ file target
target: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=3db137490e899cdb30d48b1cd07826a93cae7516, not stripped
(15) file 命令查看文件的属性
gec@ubuntu:~/gz1812/0409$ gcc -o target main.c
gec@ubuntu:~/gz1812/0409$ ls
main.c target
gec@ubuntu:~/gz1812/0409$ file main.c
main.c: C source, ASCII text
gec@ubuntu:~/gz1812/0409$ file target
target: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=3db137490e899cdb30d48b1cd07826a93cae7516, not stripped




4、2: C语言基础知识
a: 常量和变量
常量:在代码里面出现所有的数字、字符、字符串
int a = 100;
char c = ‘x’ ;
char buf [100] = “hello world”;
变量 在运行过程中数值会改变
变量名是由字母或者下划线开头,由字母、数字、下划线组成的
基本数据类型
表示对应的变量在内存中占用的字节数
char 占用1Byte
int 占用4B(在32位机) ,在16位机上是2B,在64位机上4B
long 占用4B(在32位机) ,在16位机上是4B, 在64位机上8B
char buf [100] 由100个char类型的数据组成的数组变量,占用100B
运算符
= 是赋值运算符
== 判断左值和右值是否相等
> 判断左值是否大于右值
< 判断左值是否小于右值
++ 变量值自加1后再给自身赋值
如a为10 , a++之后a变成11
-- 变量值自减1后再给自身赋值
如a为10 , a--之后a变成9
b: main函数的定义
1)int main(void) { } 不带参数的main函数
2) int main(int argc , char * argv[ ]) 带参数的main函数, 在终端输入执行命令的时候,给它的参数进行了赋值
5、c: 简单的格式化IO语句
格式化输出
printf(“hello world \n”); 直接在终端上输出字符串“hello world \n”
int i = 8;
int x = 100;
printf("Hello world %d \n", i ); 输出一个变量的十进制值
printf("Hello world %d , %d \n", i, x ); 输出两个变量的十进制值
int i = 8;
int x = 100;
printf("Hello world %d \n", i ); %d输出一个变量的十进制值
printf("Hello world %o , %x \n", i, x ); %o 输出一个变量的八进制值
%x 输出一个变量的十六进制值
gec@ubuntu:~/gz1812/0409$ ./target
Hello world 8
Hello world 10 , 64
char buf [100] = “hello world”;
printf(“buf is %s \n” , buf ) ; %s是直接输出字符串
\n 换行 相当于enter键
\t 制表符 相当tab键
6、格式化输入:
int i = 8;
printf("please change the i value: ");
scanf("%d", &i); 从键盘上读十进制数(0~~9)放在i的地址中(&i)
char buf [100] = “hello world”;
scanf(“%s”, buf ); 从键盘上读数据给字符串赋值
(遇到空格或者换行enter键就停止)
!!! 只需要写字符串变量名, 不要加&
scanf的格式不能随意加格式,因为你设置的格式必须在输入的时候也输入
d: 简单的控制流语句
分支跳转:
if(a>b) // 如果a的值比b大,max的值就是a值;
{
max = a;
}
else // 否则 max的值就是b值;
{
max = b;
}
循环语句:
for( ; ; )
for(初始语句 ; 条件判断 ; 执行完循环体之后执行的语句)
{
循环体;
}
*****************************************
编译不能有warning也不处理!
每个printf()必须加\n, 除非有特殊的人机对话需求
*****************************************
