实训linux-项目学习(介绍与基本操作)

前言:最近在实训Linux环境下编写程序,这个系统和windows系统不一样,初次真正接触Linux有点不习惯,但是实训老师说将来工作大多在这个系统下编写程序,万般无难废了cb的调试,一直用终端编写程序,几天下来也习惯了Linux的环境,非常顺手!我要记录一下一下学习这个过程!!!
Linux的介绍:
1开源-安全-免费(free的系统第一次听说!)
2Linux文件系统是一棵单根树;类比Windows是一棵多根树。
3Linux基本命令:
1)cd 目录名称 (进入某一目录)
2)ls 目录名称 (列出目录的名称)
3)mkdir 目录名 (创建目录)
4)rmdir 目录名(删除空目录名)
5) touch 文件名 (创建 )
6) rm 文件名 (删除文件)
7) rm-r 目录名称 (递归删除)
8) gedit b.c (编译c程序)
9) cp 文件名 新文件名 (文件拷贝)
cp 全路径/文件名 全路径/文件名
1
在这里插入图片描述
2
vim的操作在这里插入图片描述
3
学生管理系统(不同于单链表-用双向循坏链表)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可变长结构体
struct node
{
struct node *prev;
struct node *next;
char data[0];//可变长结构体
};
1 什么是柔性数组?

柔性数组既数组大小待定的数组, C语言中**结构体的最后一个元素可以是大小未知的数组,也就是所谓的0长度,**所以我们可以用结构体来创建柔性数组。

2 柔性数组有什么用途 ?

它的主要用途是为了满足需要变长度的结构体,为了解决使用数组时内存的冗余和数组的越界问题。

3 用法

在一个结构体的最后 ,申明一个长度为空的数组,就可以使得这个结构体是可变长的。对于编译器来说,此时长度为0的数组并不占用空间,因为数组名本身不占空间,它只是一个偏移量, 数组名这个符号本身代 表了一个不可修改的地址常量 (注意:数组名永远都不会是指针! ),但对于这个数组的大小,我们可以进行动态分配,对于编译器而言,数组名仅仅是一个符号,它不会占用任何空间,**它在结构体中,只是代表了一个偏移量,代表一个不可修改的地址常量!**对于柔性数组的这个特点,很容易构造出变成结构体,如缓冲区,数据包等等。

1 typedef struct _S_HB_TIME_REPORT_INFO
2 {
3 uint16_t msg_id;
4 uint16_t msg_buf_len;
5 char msg_buf[0];
6 }attribute((packed)) S_HB_TIME_REPORT_INFO;
  我们可以用sizeof(S_HB_TIME_REPORT_INFO) 求得数组大小为4,说明柔性数组是不占用内存的。这**样的变长数组常用于网络通信中构造不定长数据包,不会浪费空间浪费网络流量,**比如我要发送1024字节的数据,如果用定长包,假设定长包的长度为2048,就会浪费1024个字节的空间,也会造成不必要的流量浪费。

所以建议使用柔性数组去定义可变大小结构体。

发布了90 篇原创文章 · 获赞 18 · 访问量 3355

猜你喜欢

转载自blog.csdn.net/sherry_zhen/article/details/103737998