基于linux的c语言

本文详细介绍了C语言在Linux环境下的动态内存管理,包括动态内存的概念、申请和释放空间的函数。同时,文章探讨了构造类型,如结构体、共用体和枚举的定义、使用及特点,为读者提供了深入理解C语言内存管理和构造类型的基础知识。
摘要由CSDN通过智能技术生成

动态内存与构造类型

一,动态内存

        1,概念

             动态内存:由管理员进⾏申请内存空间来使⽤(申请⼤⼩也是我们决定)存储数据, 访问数据;管理员⾃⼰进⾏释放内存空间的使⽤⽅式。

        动态内存的存储的区域------堆区,它由程序员⾃⼰管理 动态内存的申请与释放是程序员通过调⽤库函数来实现。

        2,申请空间

        #include < xxx  >    xxx在这⾥就有对应的库函数

        申请空间:在堆空间中申请指定size字节⼤⼩的空间⽤于使⽤,申请成功会 把申请的空间⾸地址(开始地址)返回,如果失败返回NULL(0x0地址)

        void * malloc(unsigned int size);

        3,释放空间

                从堆空间中,释放指定地址ptr对应的空间

                void free(void * ptr);         free(空间⾸地址);

        注:申请的空间一定要记得释放,如果不释放就会一直占用,系统不会自动释放。

二,构造类型

        1,概念

        构造类型:int、float、double...叫做基础类型,而由这些类型做成的、含有多个的组合类型称为构造类型。

        2,结构体

        ⼀种类型,这种类型由多个部分构成,每个部分只表⽰⼀个信息(内 容),共同组合表⽰⼀个完整的信息内容,⼀个新的类型

        类型声明:----说明有⼀个新的类型(不表⽰有这个类型的变量)

        struct 结构体名-----表⽰新的类型名

        {

                数据类型1 成员名1;

                数据类型2 成员名2;

                数据类型3 成员名3;

                 ........

         };

        

 

         定义结构体变量: struct 结构体名 变量名; 构造类型(⾃定义类型)

         初始化: struct 结构体名 变量名 = {值};                 初始化可以部分初始化也可以全部初始化。

         使⽤结构体变量: 结构体变量是⼀个整体,包含多个成员的类型 需要单独对结构体变量中的成员进⾏操作

             方法:   结构体变量名.成员名 ------访问某个成员

         更改结构体中的某一个变量:

        方案:strcpy (目标地址,原地址)     含义:将源地址中的字符串复制到目标地址

        

         

#include<stdio.h>
#include<string.h>

//声明一个新类型
struct stu
{
	//定义一个字符数组用来保存学生的姓名
	char name[20];
	//定义一个浮点数来表示学生的年龄。
	float age;
	//定义一个整型来表示学生的性别。
	int sex;
};


int main()
{
	struct stu s1;	//定义结构体 stu 类型变量 s1
	//全部初始化
	struct stu s2 = {{'x','i','a','o','l','i'},20,1};
	struct stu s3 = {{"xiaozhang"},22,2};
	//部分初始化
	struct stu s4 = {.name = "xiaowang", .sex = 2};	//不初始化年龄,记得使用 . 隔开。

	printf("stu s1 age is %f\n",s1.age);			//单独访问。
	
	//更改某个变量的信息
	//方案:strcpy (目标地址,原地址)     含义:将源地址中的字符串复制到目标地址
	strcpy(s2.name,"xiaozhao");
	printf("s2.name is %s",s2.name);
	
}

         使⽤结构体指针访问变量内容:

                结构体指针: struct 结构体名 指针名;    结构体指针访问:指针名->成员名。 

 

        3,共用体

                概念:与结构体使⽤⽅式相同,表⽰含义也是相同,只是共⽤体是所有的成员 共⽤同⼀段内存空间

                定义:

        union 联合体名

                                                                {

数据类型1 成员名1;

数据类型1 成员名2;

.............................

                                                                };

        只是成员1,成员2,....共⽤⼀个空间,每个成员没有单独的空间,空间为 最⼤成员的空间能够整除在共⽤体中最⼤的类型

        在使⽤共⽤体时,同⼀时间只能使⽤⼀个成员,这个成员使⽤完,才能再使 ⽤其他成员

        4,枚举

        概念:有些类型的数据取值范围只能是固定的某些值,这种数据类型限制数据 的取值范围,把能够表⽰的值⼀⼀列举出来,这种类型的变量就只能从 列举的值中取值

        定义:

                                                enum 枚举名

                                                {

                                        成员1,//第⼀个成员默认是0,之后的成员是上⼀个成员的值+1

                                                 成员2,

                                                  成员3,

                                                };

weixin063传染病防控宣传微信小程序系统的设计与实现+springboot后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
好的,关于您所提到的问题,我能够给您一些基本的思路和实现方法。管道通信是Linux系统中一种非常常见的进程间通信方式,可以实现不同进程之间数据的传输和共享。下面是一份基于Linux C语言的管道通信例程,您可以参考一下: 1. 父进程创建一个管道,通过fork()函数创建一个子进程来读取管道中的数据。 ``` #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(){ int fd[2]; pid_t pid; char buffer[20]; //创建管道 if(pipe(fd)<0){ printf("Create pipe error!\n"); exit(1); } //创建子进程 pid = fork(); if(pid < 0){ printf("Create process error!\n"); exit(1); }else if(pid == 0){ //子进程读取管道中的数据 close(fd[1]); int n = read(fd[0], buffer, sizeof(buffer)); printf("Child process received: %s\n", buffer); close(fd[0]); }else{ //父进程向管道中写入数据 close(fd[0]); char* data = "Hello, child process!"; write(fd[1], data, sizeof(data)); printf("Parent process sent: %s\n", data); close(fd[1]); } return 0; } ``` 2. 父进程向管道中写入数据,子进程进行读取并输出。 以上面的代码为例,首先父进程通过pipe()函数创建了一个管道fd,接着通过fork()函数创建了一个子进程,并通过pid变量来判断当前进程是否为父进程或子进程。在父进程中,我们先关闭了管道的读端,然后通过write()函数向管道中写入了数据"data",并输出了发送成功的信息。在子进程中,我们先关闭了管道的写端,然后通过read()函数从管道中读取数据到buffer缓冲区中,并输出读取的结果。 这就是一个简单的基于Linux C语言的管道通信例程实现方法。当然,具体实现方法还需要根据实际情况进行调整,但是我们通过这个例子可以清晰地了解到管道通信的基础原理和实现方法,希望能够帮到您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值