Linux c小结

为时一周半左右的Linux c基础学习,主要学习了shell编程,结构体,makefile文件的编写等,下面就进行简单概括:

一、shell编程

shell编程就是一堆shell命令的集合

1.shell命令的执行过程:创建一个.sh文件;修改文件的权限;执行

2.shell的注释:必须写在程序的首行,告诉计算机使用的版本

3.变量:

用户自定义变量:

1.命名规范: 由数字,字母,下划线组成,首字母不能为数字 ;不能为关键字和保留字 ;尽量见名知意,尽量大写

2.访问shell变量,变量赋值时,等号左右两边不能有空格

3.预定义变量:

$# 包含命令行参数的个数                    $@ 包含所有命令行参数:"$1 $2 ...$9"                                $* 包含所有命令行参数:"$1,$2.....$9"            $$: 包含正在执行进程的ID号                                      $? 包含前一个命令退出的状态

4.环境变量:HOME,PATH等

5.shell程序和语句:

说明性语句,功能性语句,算术运算命令expr

test测试命令:

测试字符串 :s1 = s2 测试 两个字符串的内容是否完全一样 ;

s1!= s2测试两个字符串的内容是否有差异 ;

-z s1测试s1字符串的长度是否为0 ;

-n s1测试s1字符串的长度是否不为0

测试整数 :a -eq b 测试a与b相等 (equal);

a -ne b 测试a与b不相等;

a -gt b 测试a是否大于b (great);

a -ge b 测试a是否大于等于b a -lt b;

测试a是否小于b a -le b;

测试a是否小于等于b

文件属性:

-d name 测试name是否为一个目录;                     -f name 测试name是否为普通文件                      -L name 测试name是否为符号链接                      -r name 测试name是否存在且可读                      -w name 测试name是否存在且可写                     -x name 测试name是否存在且为可执行               -s name 测试name是否存在,且长度不为0           f1 -nt f2 测试文件f1是否比文件f2更新                 f1 -ot f2 测试文件f1是否比文件f2更旧

结构性语句:

1.顺序:read输入和echo输出

2.选择:单分支多分支和双分支

case 字符串变量 in
# 1|3|5|7
模式1|模式11|模式12)
语句1
;; #---->break
模式2)
语句2
;;
模式3)
语句3
;;
....
3.循环
1.for
<1>.带列表的for
模式n)
语句n
;;
*)
语句n+1
;;
esac

3.循环:for循环(分为带列表,没带列表和带c的for)

while循环(break和continue跳出循环)

4.函数的调用

方式一:

value_name=`function_name arg1 arg2`
变量名=`函数名 参数1 参数2`
函数的所有标准输出都传递给了主程序的变量

方式二:

function_name arg1 arg2
函数名 参数1 参数2
echo $? #$?上一个命令退出的状态

二、结构体

1.定义结构体举例创建

//定义结构体语句
struct 结构体名字
{
   属性1;
   属性2;
   属性3;
};
//(学生)集合属性:
1.姓名 char name[SIZE]; //字符数组和字符串是标配
2.身高 int height; //基本数据
3.三门成绩 float scores[3];//数组
//定义一个学生的结构体
struct student
{
char name[20];
int height;
float scores[3];
};

2.内存管理

3.在堆区分配空间和释放空间

分配空间:

#include <stdlib.h>
//参数:你要分配空间的大小
//返回值:void * void (表示空) void * (任何数据类型的地址)
//分配成功返回空间的首地址,失败则返回NULL
//malloc分配的空间未进行清空
void *malloc(size_t size);

三、makefile文件

1.自定义头文件

要求后缀必须为.h;

“”和<>的区别:“” 编译器从用户的工作路径开始搜索头文件

<>: 编译器从标准库路径开始搜索头文件

2.条件编译:

作用:避免头文件被重复引入,实例如下:

//stu.c
#ifndef _STU_H
#define _STU_H
//<1>.引入库头文件
//<2>.宏定义
//<3>.结构体类型的定义
//<4>.枚举类型的定义
//<5>.函数声明
//<1>.引入库头文件
#include <stdlib.h>
5.建议阅读LinuxC--->(53-54)
3.gcc工作原理
vim--->命令模式---->gt 切换多个文件切换
1.分阶段执行
1.预处理
2.编译
3.汇编
4.链接:
在连接阶段将输入的机器代码文件*.o(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代
码文件
//<2>.宏定义
#define N 20
#define M 3
#define SIZE 5
//<3>.结构体类型的定义
//该句话是前两句话的简化
typedef struct student
{
    char name[N];
    int height;
    float scores[M];
}Stu;
//<4>.枚举类型的定义
//<5>.函数声明
void output(Stu * ps,int n);
void menu(void);
void input(Stu * ps,int n);
Stu *calpmaxheight(Stu *ps,int n);
void sortHeight(Stu * ps,int n);
#endif

3.gcc工作原理:

vim--->命令模式---->gt 切换多个文件切换

分阶段执行:预处理,编译,汇编,链接

链接的作用:在连接阶段将输入的机器代码文件*.o(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代 码文件

4.makefile变量:

自动变量 :.$@ 目标文件             .$^ 所有的依赖文件                    .$< 第一个依赖文件

预定义变量 :Makefile预定义变量包含了常见编译器,汇编器的名称及其编译选项 .

CC C编译器的名称,默认为cc .                         CFLAGS C编译的选项,无默认值 .

RM 文件删除程序的名称,默认值为rm -f

5.makefile的变量展开方式:

递归展示方式:

简单展开方式:

四、函数指针

定义函数指针:

//定义一个指向int的指针
int * pi; (int)
//定义一个指向int的指針的指針
int ** ppi; (int *)
//定义一个指向char的指针
char * pc; (char)
//定义一个指向数组的指针,该数组是一个长度为5的int的数组
int (*parr) [5]; (int [5]) int arr[5]
int (*parr) [5]
//定义一个指向结构体的指针,该结构体的类型(Stu)
Stu * ps; (Stu)
//定义一个指向函数的指针,该函数参数为两个int,返回值為一个int的函数
函数的类型: 返回值类型 (参数列表)
int (int,int) int add(int,int)
int (*pfun) (int,int)

 存储类型:

register 寄存器;auto (默认) 存储类型 类型名 变量名;extern 外部的

1.变量 局部变量 :定义在函数体内部的变量,称为叫局部变量

作用域:自定义开始到最近}结束,函数作用域 ,块作用域

生命周期:函数调用分配,函数结束释放

全局变量:定义在函数体外部的变量,称为叫全局变量

作用域:自定义开始到文件 文件作用域

2.extern修饰全局变量

//show2.c
#include <stdio.h>
extern int a; //使用外部变量a
void show2(void)
{
a+=20;
printf("show2 a=%d\n",a);
}

3.extern修饰函数

include <stdio.h>
//extern修饰函数:使用外部的函数
extern void show1(void);
extern void show2(void);
int main(void)
{
show1();
show2();
}

4.static 静态的

static修饰全局变量 (隐藏);

static修饰函数 (隐藏);

static局部变量:延长变量的生命周期

5.枚举:(语义化)定义常量的一种方式 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值