Linux C基础笔记(1)

Linux C基础笔记(1)

【1】四个重要的人物
肯.汤姆森:B语言发明者,C语言发明者,UNIX发明者,AT&T
丹尼斯.里奇:C语言之父,UNIX 之父
理查德.斯托曼:自由软件之父,linux系统
林纳斯.托瓦兹:linux之父
【2】学习ubuntu以及基本的linux命令
开启一个终端:
ctrl+alt+t 开启一个终端
ctrl+shift+t 左右分屏开启终端(必须有终端才可以使用)
ctrl+shift+n 重新开启一个(必须有终端才可以使用)
提示信息:
linux@ubuntu:~$
linux:用户名
ubuntu:主机名
~:代表家目录
/:表示根目录,cd / 进入根目录,cd ~ 进入家目录
$:代表普通用户权限
#:表示管理员(超级用户)权限,使用sudo su root进入管理员权限,
sudo 临时获取管理员权限,su用户之间的切换,使用exit退出管
理员权限(返回上一个用户)
在当前用户下,使用exit关闭终端,或者可以使用ctrl+d
【3】linux基本操作命令
linux一切皆文件
ls 查看当前目录下的文件名
ls -a 查看所有文件(包括隐藏文件)
. : 表示当前路径
…:表示上一级路径
ls -l 查看文件信息
drwxr-xr-x 9 linux linux 4096 8月 22 11:26 class
d:文件类型 bcd-lsp
b:块设备文件(驱动) 就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。
c:字符设备文件(驱动) 即串行端口的接口设备,例如键盘、鼠标等等.
d:目录文件: 就是目录, 能用 # cd 命令进入的。,例如 [drwxrwxrwx]
-:普通文件: Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.
l:链接文件 类似Windows下面的快捷方式。
s:套接字文件 这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。最常在 /var/run目录中看到这种文件类型
p:管道文件 FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。
rwxr-xr-x:操作文件的权限,
权限范围三组,用户主、用户组、其他用户
r:可读权限 w:可写权限 x:可执行权限
9 链接的个数
linux 用户名
linux 组名
4096 文件大小
8月 22 11:26 最后修改的时间戳
class 文件名
ll 查看文件信息
ls -lh 带单位显示信息
ls -i 查看文件的iNode号

清屏:
	clear
	ctrl + l

cd  进入一个指定的目录
	cd ~:进入家目录
	cd:进入家目录
	cd /:进入根目录
	cd -:返回上一次的目录
	cd .:到达当前路径
	cd ..: 返回上一级路径

	相对路径:从当前目录到想要到的位置(. 和 ..)
	绝对路径:从根目录开始,当前文件所在的位置
			使用pwd查看当前路径的绝对路径

	自动补全:tab键
	
mkdir + 目录文件名 创建一个目录文件	-p 创建多个目录

rmdir + 目录文件名 删除一个空的目录文件(如果目录不为空,则不能删除)
	
touch + 文件名 创建一个空的文件(如果文件存在,则会更新时间戳)  一般不用

rm + 文件名 删除一个文件
	rm -rf + 文件名 删除一个目录
	
cp + 文件名 + 目录  将文件复制到目录当中
	cp + 文件1 + 文件2 将文件1复制为文件2
	
	cp -a + 目录1 +目录2 将目录1复制到目录2

mv + 文件名 + 目录  将文件移动到目录里面
	mv + 目录1 + 目录2 将目录1移动到目录2	mv + 文件名 +新文件名
	
	mv也可以重命名,如果早同一级目录下操作文件或者目录即可

【3】查看文件内容
1.cat + 文件名 查看文件 -n 加行号
2.more + 文件名 分页显示 空格 / 回车 翻页,q 退出
3.less PgUp向上翻页,PgDn向下翻页,q 退出
4.head - num + 文件名 num:行数 显示前num行
5.tail - num + 文件名 num:行数 显示后num行
6.wc 计算文件byte数,字数,行数 -c -w -l
7.nl 带行号显示(除去空格)
8.od -c 区分teb键和空格

【4】vi编辑器
进入编辑器:vi xx.c

三种模式:
	命令模式:刚进入编辑器就是命令模式,或者在其他模式下,按esc进入命令模式
		插入模式主要复制、粘贴等操作
		
		如何进入插入模式:
			a:从光标所在位置的后一个位置进入插入模式
			A:从光标所在行的末尾位置进入插入模式
			
			i:从光标所在位置的前一个位置进入插入模式
			I:从光标所在行的开头位置进入插入模式
			
			o:从光标所在行的下一行另起一行进入插入模式
			O:从光标所在行的上一行另起一行进入插入模式

			s:删除光标所在字符,进入插入模式
			S:删除光标所在行,进入插入模式

			R:进入替换模式,esc结束

			cw: 删除光标所在位置到这个单词的末尾,进入插入模式
			cb: 删除光标所在位置到这个单词的头,进入插入模式
			c0: 删除光标所在位置到行首,进入插入模式
			c$: 删除光标所在位置到行尾,进入插入模式
				
		
		/xx 在当前文件下查找含有xx的字符串
		yy:复制光标所在的一行
                    y0;光标到行首复制
                    y$;光标到行尾复制
		nyy: 复制n行
                    :x,zy; 复制x行到z行
		p:粘贴
		dd:剪贴一行
		ndd:剪切n行
		u:撤销		Ctrl + r 反撤销
		gg:将光标移动到第一行
		G:将光标移动到最后一行	
                    :s/old/new/ 当前行替换 
		:x,ys/old/new  x到y行替换
                    :,$s/old/new/g 光标所在位置到最后一行替换
                    :%s/old/new/g 全文替换

		h j k l  左 下 上 右
		b:移动到当前单词的开始
		e:移动到当前单词的结尾
		w:移动到下一个单词
		0:移动到行首
		$:移动到行尾
	插入模式:主要写代码
	
	底行模式:在命令模式下,输入':'表示进入底行模式,底行模式主要功能为保存退出使用
		w 	保存
		q 	退出(文件必须保存)
		q! 	强制退出
		wq	保存并退出
		x       保存并退出
		%s/a/b/g 将文件里面所有的a替换为b	不加/g  只替换每行第一个
		m,ns/a/b/g 将m到n行的a替换成b
		noh	取消高亮显示
		n 光标直接跳转到第n行 
		vsp xx.c  左右分屏显示文件
		sp 上下分屏
		wqa 保存所有打开的文件并退出
		/search  查找
		
[备注]:vi编辑器上下左右出现ABCD      以root权限执行以下命令:cp /etc/vim/vimrc ~/.vimrc

【5】注释方式
方法1:注释一行
//
方法2:注释多行
/* … */
方法3:注释许多
#if 0

#endif

【6】gcc编译
gcc *.c 最终生成一个a.out的可执行文件,使用./a.out去执行
gcc *.c -o xxx 最终生成一个xxx的可执行文件,使用./xxx去执行
GCC的四个编译流程:
1.预处: 预处理文件 *.i文件 gcc -E 宏定义替换
2.编译: 汇编文件 *.s文件 gcc -S 检查语法是否有错误
3.汇编:汇编文件 *.o文件 gcc -c 生成二进制文件
4.链接:可执行文件 *.exe文件 gcc -o 链接库函数

利用 __-FILE__,__FUNCTION__,__LINE__实现代码跟踪 printf("%s,%s,%d\n",__FILE__,__FUNCTION__,__LINE__); 输出文件名 函数和行号

【7】计算机数据表示
数值型数据
凡是按进位的方式计数的数制叫做进位计数制,简称进位制。
十进制、二进制、十六进制、八进制

		二进制:用0和1表示数据
			1011101
			
		十进制:接近于人类理解的数据
		
		八进制:有0-7构成的数据,在数据之前加0,用来标识八进制数
			一位八进制数由三位二进制数组成
		
		十六进制:由0-9 a-f组成
			一位十六进制数由四位二进制数组成
	
非数值型数据
	计算机识别的永远都是整型数据,所以如果想使用非数值型数据,需要将其转化为整型数据,
	使用ascii表示(在终端输入man ascii可以查看ascii表)
	
	'\n'  		10
	'0' - '9' 	48 - 57
	'A' - 'Z'	65 - 90
	'a' - 'z'   97 - 122
	
计算机是以补码的方式进行存储数据的,之所以使用补码而不是直接使用二进制实际是为了解决正负运算的问题。

	原码:最高位为0为正,1为负,也就是说原码中的正数是一致的,只有为负数时最高位会为1


	反码:反码是在原码的基础上进一步改进,正数还是同原码及普通二进制一致,但负数则根据该负数的绝对值,也就是正数的原码进行翻转,如果是0就变成1,如果是1则变为0,

	补码:补码的正数和反码以及原码、普通二进制的一致,没有区别,而负数实际是在原有负数的反码上面+1。
			
				5					-5
	原码	00000000 00000000 00000000 00000101      10000000 00000000 00000000 00000101 
	反码	00000000 00000000 00000000 00000101	 11111111 11111111 11111111 11111010
	补码	00000000 00000000 00000000 00000101	 11111111 11111111 11111111 11111011

【8】词法符号
关键字
关键字是由系统预定义的词法符号,有特定的含义,不允许用户重新定义。下面是一些基本关键字:
auto break case char const
continue default do double else
enum extern float for goto
if int long register return
short signed sizeof static struct
switch typedef union unsighed void
volatile while

标识符
	标识符是由程序员按照命名规则自行定义的词法符号,
	用于定义宏名、变量名、函数名和自定义类型名等。
	C语言的命名规则如下:
		1)标识符由一个或多个字母、数字或下划线组成
		2)标识符的第一个字符必须是字母或下划线
		3)标识符不能与任何关键字相同
	注意:linux严格区分大小写

标点符号
	C语言中的标点符号有逗号、分号、冒号、花括号、圆括
	号。标点符号的作用与分隔符相似,但用法非常严格,有
	着明确的语法规定。有些标点符号出现在表达式中时,当
	作运算符使用

分隔符
	分隔符是用来分隔其他的词法符号
	主要包括: 
		空格符、换行符号、注释、制表符

运算符:
	表示运算的词法符号
	主要包括: 
		算术运算符、 逻辑运算符、关系运算符、位运算符、
		赋值运算符、 递增递减运算符、地址运算符、
		逗号运算符、sizeof运算符…

【9】基本数据类型
逻辑类型。
只有两个量true和false,表示逻辑真值和逻辑假值。

整数类型。
	C支持四种整数类型:char, short, int和long,整数类型用于处理整数。

		char 一般用于表示一个字符,由于范围太小,所以一般不用于表示整型数据  -128 ~ 127 或0 ~ 255

		int 整型数据,占4个字节,使用%d来打印    			     

		short 短整型,占2个字节						     -32768 ~ 32767 或 0 ~ 65535

		long 长整形,在32位操作系统,占4个字节				     -2 147 483 648 ~ 2 147 483 647 或0 ~ 4294967295

浮点类型。
	C支持两种浮点类型:float和double,浮点类型用于处理包含小数部分的数值。

		float 单精度 使用%f打印	占4字节		若float x ;x = 10/4 ; x的值是2

		double 双精度 使用%lf打印 占8字节

void类型。
	该类型也叫缺省型,用于描述值为空集, 主要用于说明不返回值的函数或指向任一类型的指针等。

枚举类型
	enum :在实际的编程应用中,有的变量只有几种可能的取值,譬如说一个星期的七种可能,性别的两种可能等等。C语言为这种类型的变量的定义提供了enum关键字。

	       要使用枚举类型的变量,首先需要先定义一个枚举类型名,然后再声明该变量是枚举类型的。如果开头不写Mon=1的话,Mon的默认值为0,然后从0开始增长。一次增加1.
	
	定义 :1. enum Month {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,dec} a,b;

	       2.enum Month {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,dec};
		 enum Month a =  Feb;

	       3.typedef enum  {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,dec} Day;
		 Day a, b;

	例如:typedef enum WEEKDAY{

				   MONDAY = 1,

				   TUSEDAY,

				   WEDNESDAY,

			    	   THURSDAY,

				   FRIDAY,

				   SATURDAY,

				   SUNDAY		   
			}WEEKDAYS;
int main(int argc, char ** argv)	     
{
WEEKDAYS day = MONDYA;
		 return 0	     
}

猜你喜欢

转载自blog.csdn.net/qq_34934140/article/details/89024431
今日推荐