LinuxC从入门到精通

shell
1、通配符
*表示任意长度字串,但不能表示 圆点 . 和路径符号/
?表示单个字母
[]表示模式串匹配的字符范围,[a-d]等于[abcd],[ab-dm] *表示以a,b,c,d,m开头的文件名称
2、引号
单引号中所有字符保持本义,如$保持本意,没有引用变量值的意思
双引号中 $ , \ , `具有特殊意义
反引号(键盘左上角)括起来的部分会被shell解释为命令行,将命令执行结果取代反引号内容。
Linux常用命令
tar
选项-c建立新的tar文件,-v显示运行过程,-z使用gzip,-t查看压缩文件内容,-f文件名称,-x解压缩tar文件
netstat 显示本机网络状态
telnet 远程登陆服务器主机
C语言
八进制必须0开头
pow(x,y)求x的y次方,两数都为double型
八进制形式的转义字符最多后跟三个数字,也即\ddd,最大取值是\177(即十进制127);
十六进制形式的转义字符最多后跟两个数字,也即\xdd,最大取值是\7f。

大端模式和小端模式的记忆:
计算机存储都是从低地址到高地址,大端模式是先存权重大的,比如123,1就代表100,2代表20,就先存1也就是高位,小端模式先存权重小的。

逗号运算符
表达式1,表达式2:从左往右分别求表达式的值,并把表达式2的值作为整个表达式的值

各种运算符的优先级:https://jingyan.baidu.com/article/ae97a646c865ccbbfd461dd3.html

有符号和无符号的整数进行运算,自动变为无符号数进行运算

%9.3f表示输出宽度为9,包括小数点,小数位为3的实数

数组元素的下标只能为整型常量或整形表达式

字符串连接函数strcat(st1,st2)将st2连接到st1后面,st1应具有足够的长度装下st2,strcpy同理。

strcmp(字符数组名1,名2)按ascii值大小逐个比较两字符串数组中的各个字符,知道出现不同字符或’\0’,1=2,返回0;1>2返回正整数;1<2返回负整数。

数组a[10]可以用*(a+i)形式来访问

char *str = “string”;
char string[] = “string”;
str指向字符串常量,此串不可改,指针指向可以改,string是数组,其中内容可以改。

结构体定义方式:https://www.cnblogs.com/mhq-martin/p/12093190.html

结构体指针定义
struct qwer *a,d;
a = &d;
(*a).name等价于a->name等价于d.name (因为.优先级高于 ,因此a的括号不可少)

只有先定义了union变量才能在后面使用,不能直接引用共用体变量union,只能引用其中的成员。

struct d{
char a:3;(类型说明符 位域名:位域长度;)
char b:3;
char c:2;
}
位域,上面的位域结构将一个字节分为3/3/2,节省空间使用。一个位域必须存储在同一个字节内,不能跨两个字节。位域长度不能超过8,可定义无名位域,但没法使用。

枚举类型:
通常用来表示可选值的数据类型,如下

enum num {
ONE = 1,
TWO,
THREE,
}

这样,enum num 就成了一个新的类型名,可用来定义变量:
enum num a = ONE;
实际上,编译器会把枚举类型处理为整数,等价于:
int a = 1;
枚举类型通常用来批量定义整形常数。

内联函数
GNU C支持用inline 关键字把函数定义为内联函数,如:
static inline sum(int a, int b)
{
return a + b;
}
内联函数的功能与普通函数相同,但是当打开编译器的优化选项时,内联函数将不会产生独立的代码,而是嵌入到调用它的地方,因此可以省去调用开销,加快执行。
即使打开编译器优化选项,由于函数本身和使用上的一些原因,内联函数也可能被当作普通函数来编译。为了使内联函数产生效果,一般需将inline与static一起使用。同时内联函数每调用一次就相当于函数体的代码重写一次,因此函数体应尽量短小。
注意内联函数并不属于C语言标准。

#error error-message 指令强制编译程序停止编译,一般用于调试程序,显示错误信息。

Linux计时器
alarm()函数说明
1.引用头文件:#include <unistd.h>;
2.函数标准式:unsigned int alarm(unsigned int seconds);
3.功能与作用:alarm()函数的主要功能是设置信号传送闹钟,即用来设置信号SIGALRM在经过参数seconds秒数后发送给目前的进程。如果未设置信号SIGALARM的处理函数,那么alarm()默认处理终止进程。设置处理函数使用signel(SIGALARM,func);
4.函数返回值:如果在seconds秒内再次调用了alarm函数设置了新的闹钟,则后面定时器的设置将覆盖前面的设置,即之前设置的秒数被新的闹钟时间取代;当参数seconds为0时,之前设置的定时器闹钟将被取消,并将剩下的时间返回。
5、对于linux的信号,如果用户自己注册了某信号的处理函数,那么他的执行过程是这样的。
1.收到该信号后马上进入内核态
2.内核将进入内核前的用户现场(寄存器、标志位等)保存,具体是建立一个数据结构(《linux内核源码》一书中称为“原始框架”);
3.调用该信号的处理函数
4.将用户现场恢复,继续执行

vi
https://blog.csdn.net/cyl101816/article/details/82026678

gcc
在这里插入图片描述
选项:
-o filename 指定输出文件名
-c 只编译不链接,生成目标文件“.o”
-S 只编译不汇编,生成汇编代码
-E 只预编译
-g 加入调试信息
-O-O2-O3 加入优化选项
-static 链接静态库
-Wall 打开gcc的所有警告,详细查错
-Werror 它要求gcc将所有的警告当成错误进行处理
-w 禁止所有警告

gdb
命令:
file 装入调试文件
break 在代码设置断点
run 执行调试程序
kill 终止调试程序
step 执行一行源码,进入函数内部
next 执行一行但不进内部
print 打印表达式或变量的值
quit 退出gdb
shell 不离开gdb而执行shell命令
display 自动显示命令,单步执行时每一步都显示相应变量的值
examine (简写是x)查看内存地址中的值
set 设置环境变量
show convenience 显示所有环境变量
list 显示源码

make
用来执行Makefile文件
makefile
基本语法:
目标文件 : 依赖文件
执行的命令
伪目标:一般没有依赖文件,如clean,为了不和文件重名,用.PHONY : clean来声明

文件
-是普通文件 d目录文件 b块设备文件 c字符设备文件
l链接文件 s套接口文件 p管道文件

文件重定向
> filename 标准输出重定向到文件
>> file 标准输出重定向和追加内容
1> file 标准输出重定向,同上
cmd < file1 > file2 以file1内容作为cmd的标准输入,以file2作为命令执行结果的标准输出
注意文件描述符1和2与前面命令有空格,但与“>”“>>”之间没有空格
cmd 2> file 2为标准出错不可忽略
cmd > file 2> &1(1表示标准输出时需要加&,要不就成了文件名为1的文件,实际上只要是一个文件描述符,都可以用&来进行重定向操作等价于文件名)把标准输出和标准出错一起重定向到file
make &> file表示将标准输出和标准错误都输出到file,是一种shell支持的简洁写法,等价于 make > file 2>&1

重定向书写格式
1、n> file 以只写的方式打开文件file,文件原内容被清空
2、n< file 以制度方式打开文件file
3、n>> file 以只写方式打开file,新内容追加在原内容之后
4、n<> file 以可读可写方式打开file

重定向还可以一行写多个,例如cmd < file1 > file2表示两个重定向操作

arm支持7种异常
1、复位:进入管理模式并禁止中断
2、未定义指令:可使用该异常机制进行软件仿真和断点调试。
3、软件中断:通过软件执行swi指令而触发,可用于用户模式下的程序调用特权操作指令,一般使用此异常实现操作系统的功能调用。
4、指令预取中止:若处理器预取指令的地址不存在,或该地址不允许当前指令访问,则由MMU向处理器发出中止信号,于是在预取的指令被执行时,产生指令预取中止异常。
5、数据中止:若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问,产生数据中止异常。由MMU向处理器发出中止信号,于是在后续的任何指令或异常发生之前,数据中止异常发生。
6、中断:当处理器外部中断请求信号有效,且CPSR寄存器中的I位为0时,产生中断异常。系统的外设可以通过该异常请求中断服务。中断异常的优先级比快速中断异常低,当进入快速中断异常处理时,会屏蔽掉中断。
7、快速中断:当处理器快速中断请求信号有效时,且CPSR寄存器中的F位为0时,产生快速中断异常。

异常发生时,程序正常的执行流程被打断,此时arm处理器将执行如下动作。
1)在相应模式的LR寄存器中保存返回地址。
2)赋值CPSR寄存器的内容到相应模式的SPSR寄存器。
3)设置合适的CPSR标志位。
4)改变处理器状态。
5)进入相应的异常模式。
6)禁止相应的中断。
7)设置PC寄存器的值到相关的异常向量地址,跳转到异常处理代码处执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值