自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 day 25进程间通信—消息队列、共享内存、信号灯

2024-08-14 19:55:48 282

原创 day 24进程间通信—信号

3.SIGCHLD:表示该进程有一个子进程结束了。2.SIGUSR1:用户可以使用该信号实现通信。1.SIGSEGV:表示内核操作内存错误。4.SIGPIPE:表示管道破裂。3、不能被忽略和挂起的信号:9号和19号信号。1.SIGKILL 进程结束。2.SIGSTOP 进程挂起。一、信号:内核层和用户层通信的一种方式。1、缺省:按照默认的方式处理信号。3、捕捉:按照指定的方式处理信号。5、表示IO事件发生的信号。2、忽略:不处理信号。

2024-08-10 17:34:31 611

原创 day 23 进程间通信—管道

如果管道中写满(64k),则阻塞等待,等有数据读出才能继续写入。如果管道中没有数据,会阻塞等待直到有数据写入后读出。如果管道中没有数据,不会阻塞直接继续向下执行。向管道中写入数据会产生管道破裂信号。如果管道中有数据,直接读出。如果管道中有数据,直接读出。如果管道没有写满,直接写入。

2024-08-09 18:09:51 370

原创 day 22线程间通信

2、互斥锁: 是一种资源,当一个线程任务加锁,其余线程任务无法再次加锁,直到解锁后才能加锁,互斥锁主要是用来防止多个线程任务竞争某个资源,加锁和解锁中间的代码称为临界代码也称为临界区。2.不剥夺条件:不剥夺条件是指一个线程任务已经锁定了一个资源,不能被其他线程任务抢占,直到它使用完该资源。资源是有限的,在程序运行过程中,一段代码、一段空间、一个变量、CPU、内存都可以看做资源。资源数 == 0 申请操作会阻塞,直到资源数不为0,申请得到资源后继续向下执行。2.打破互斥条件、不可剥夺条件(不建议使用)

2024-08-08 19:27:14 639

原创 day 21 线程

在同一软件下的多任务考虑用多线程,不同软件下的多任务考虑用多进程,根据实际需求赉设计程序,进程和线程实际效率差不多。多线程一个线程任务异常结束可能导致进程异常结束,会导致进程中其余线程也随进程一起结束。pthread_join具有阻塞功能,线程不结束,会阻塞等到直到线程结束回收线程空间。多进程没有共享空间,通信需要使用其余的进程间通信方式完(管道、套接字、信号等)成。线程代码执行结束,空间不回收会成为僵尸线程,需要回收线程空间。多进程需要在不同的进程空间内部切换调度任务。1.线程必须位于进程空间内部。

2024-08-07 19:30:41 378

原创 day 20进程

父进程先结束,子进程成为孤儿进程,被init进程(1号)进程收养,子进程结束,init系统进程自动回收进程空间。2.子进程结束,父进程回收子进程空间,子进程不会变成僵尸进程(优先选择)wait具有阻塞功能,如果子进程先结束,wait会不阻塞直接回收。如果子进程没结束,wait会阻塞直到子进程结束回收子进程空间。2、僵尸进程产生原因:子进程任务结束,空间没有被回收,该进程成为僵尸进程。1.让父进程先结束,子进程再结束,子进程不会变成僵尸进程。进程:是一个程序动态执行的过程,包括进程的创建、调度和消亡的过程。

2024-08-06 17:50:12 941

原创 day 19目录IO和链接IO

需要注意:目录文件的权限mode有1.r 决定是否目录下可以查看其余文件信息2.w 决定目录下的文件是否能够新建3.x 决定目录文件是否能够进入。

2024-08-02 20:21:14 1167

原创 day 18流的定位、文件IO以及Linux系统中时间的获取

7.文件IO可以操作设备文件、进程间通信的文件、普通文件(Linux系统下的一切文件均可以使用文件IO)相对于标准IO来说,文件IO直接在Linux的内核中操作,也更加的简洁精炼。系统调用:是Linux内核中的函数接口,只能在Linux系统中使用。根据日历时间转换为1970年1月1日到现在的秒数。SEEK_SET:从文件开头开始偏移。SEEK_END:从文件末尾开始偏移。SEEK_END:从文件末尾开始偏移。成功返回1970年1月1日到现在的秒数。返回1970年1月1日到现在的秒数。

2024-08-01 19:28:35 785

原创 day 17标准IO的函数接口

fgets不会去掉用户输入的\n字符。gets会去掉用户输入\n字符。puts会多打印一个\n字符。1、puts和fputs的区别。2、gets和gets的区别。

2024-07-31 19:31:42 403

原创 day 16 常见shell命令、IO

4. - 普通文件 保存数据信息的文件(代码、图片、音视频、压缩包等)w 只写 如果文件存在则清0,只写打开。5.link l 链接文件 指向其他文件的文件。如果文件不存在则创建。a 追加只写 如果文件存在则追加只写打开。a+ 追加读写 如果文件存在则追加读写打开。r+ 读写 如果文件存在则读写打开。

2024-07-30 19:54:42 810

原创 day 15内存管理、链表

当使用strcat、strcpy、strcmp函数时可能会产生内存越界。1.函数体内部的局部变量会随函数结束被回收,可以考虑存放到堆区空间中避免随函数结束回收。5、内存碎片:表示申请的小的堆区空间在应用完后未释放,影响后续大的连续内存空间的开辟。注意:操作指针时,注意指针指向的空间是否存在?2、堆区空间的使用:主要是malloc和free的使用。4.单向链表、双向链表、内核链表、循环链表。3、内存泄露:申请的堆区空间没有被释放。2.数组的空间必须连续。1、内存管理在应用时遇到的问题。

2024-07-27 20:07:57 352

原创 day 14 构造数据类型、位运算

1.存放结构体成员变量,必须保证前面的长度为成员变量所占空间大小的整数倍。1.枚举常量第一个值默认为0,后面的枚举常量为前一个枚举常量的值+1。^ 按位异或 相同为0 相异为1。& 按位与 & 0得0。2.结构体整体的大小必须为最大类型长度的整数倍。2.枚举类型对应的变量的值应该为枚举常量中的值之一。括号 > 单目 > 双目 > 三目 > 赋值 > 逗号。1.小端:内存低地址存放低数据位称为内存小端。算数 > 移位 > 关系 > 位运算 > 逻辑。

2024-07-26 19:35:55 335

原创 day 13函数指针和指针函数,C语言进阶之构造数据类型

例如:struct student s = {"Kylin", 'm', 22, 100};1.char *、int *、double * 转换为void *时需要强制类型转换。2.void *转换为char *、int *、double *时不需要强制类型转换。结构体访问成员变量最终的类型由成员变量的类型决定。2.构造数据类型: 结构体、共用体(联合体)、枚举。-> :结构体指针类型访问成员变量。指针函数是函数,函数的返回值是指针。函数指针是指针,指针指向一个函数。1、指针函数:返回值为指针的函数。

2024-07-25 19:08:50 393

原创 day 12指针数组和数组指针

2.指针数组的数组名是指向数组第一个元素的指针,即指向指针的指针也就是二级指针。2.数组指针取*操作:值不变,类型降级成为指向数组第一个元素的指针。1.函数体内想修改函数体外指针变量值的时候,传指针变量的地址即二级指针。3、二维数组传参:在主函数中传入指针及行数,在函数体接收指针和规定列数。数组的数组名是指向数组第一行所有元素的数组指针。1.sizeof运算时。数组的数组名是指向数组第一个元素的指针常量。指针数组是数组,数组的每个元素是指针。数组指针是指针,指针指向一个数组。1、定义:指向指针变量的指针。

2024-07-24 18:59:40 320

原创 day 11指针和数组

作用:const修饰p和*p, 指针变量p的值不能变,也不能利用*p改变指向空间中的值, 一定要对指针初始化。作用:const修饰p, 指针变量p的值不能变, 但可以利用指针修改指向空间中的值, 一定要对指针初始化。作用:const修饰*p, 指针变量p可以修改指向的空间,但不能利用该指针修改指向空间中的值。3.一维字符型数组和指针的关系:数组的数组名是指向数组第一个元素的指针。1、数组和指针的关系:数组用来存放数据而指针用来操作数组中的数据。1.数组的数组名a是指向数组第一个元素的指针常量。

2024-07-23 17:31:29 321

原创 day10 条件编译、指针!

3.指针变量:用来存放指针(地址)的变量,使用变量等价于等使用指针,所以我们也把指针变量简称为指针。实参将地址传递给形参,形参是指向实参的指针,可以利用形参修改实参的值。对*p赋值:不会修改指针变量的指向,只是利用指针修改其指向空间中的值。*p:间接访问,通过变量在内存中的地址来使用该变量的空间。类型:对地址取*操作,会让地址类型降级为对应的数据类型。值:获得指针指向空间中的值(根据指针的类型来读取)2.指针:指针就是地址、地址就是指针,指针具有指向的概念。2.作为右值:获得指针指向空间中的值。

2024-07-22 19:08:00 1332

原创 day9函数传参、递归函数、预处理命令

----include ---- add.h add.c中用到的数据类型的定义、宏定义、全局变量的声明、全局函数的声明。|--- sub.h sub.c中用到的数据类型的定义、宏定义、全局变量的声明、全局函数的声明。|--- mul.h mul.c中用到的数据类型的定义、宏定义、全局变量的声明、全局函数的声明。jisuanqi--------src ----- main.c 主函数的实现。

2024-07-20 20:19:53 715

原创 day 8字符型二维数组、函数

例如:char str[3][32] = {{'h', 'o', 'w', '\0'}, {'a', 'r', 'e', '\0'}, {'y', 'o', 'u', '\0'}};函数类型:函数运行结果的类型(如果返回值类型与函数类型不一致,会将返回值强制类型转换成函数类型返回)3.实参与形参类型不一致时,会将实参强制类型转换为形参类型,传入函数中。函数类型 函数名(数据类型1 形参1, 数据类型2 形参2, ...)2.定义:定义一个之前不存在的变量或函数,需要开辟新的空间。

2024-07-19 21:25:08 805

原创 day 7二维整型数组、字符型数组

例如: char str[6] = {'h', 'e', 'l', 'l', 'o', '\0'};两个的区别为:scanf无法接收带' '的字符串而gets可以接收带' '的字符串。没有给定初值的元素被赋值为0('\0') ,而不是'0'例如: char str[] = {'h', 'e', 'l', 'l', 'o'};如果结果 == 0则 str1 == str2。获得字符串的长度(从字符串开头到’\0‘之前元素的个数)例如: int a[2][3] = {1, 2, 3, 4, 5, 6};

2024-07-18 19:07:12 573

原创 day 6循环结构、数组

3.默认初始化:定义变量时没有给定数组元素个数,通过给定初值的个数决定数组元素个数(尽量不要使用)2.局部初始化:只给定一部分元素的值,没有给定初值的元素会被默认赋值为0。例如: int a[5] = {1, 2, 3, 4, 5};需要注意的是在定义数组时元素个数必须为常量或常量表达式,不允许是变量或变量表达式。例如: int a[] = {1, 2, 3, 4, 5};例如:int a[5];例如:int a[5] = {1, 2, 3};例如:a[0] 、a[n]、a[1] 、a[n+1]等。

2024-07-17 18:49:56 490

原创 day 5 分支结构中if的阶梯分支、嵌套分支,switch分支的基本形式和嵌套形式,以及循环结构

续接上文2、if的阶梯分支(1)if的阶梯分支的结构(2)if的嵌套分支的结构在使用嵌套分支时需要注意:不要嵌套太深,嵌套太深会导致可读性变差,最多嵌套3 - 5层。

2024-07-16 20:35:31 521

原创 day 4 常用输入输出函数以及部分流程控制

5.scanf中只有%c可以接收' '和'\n'字符,其余均认为是数据结束的标志。%c 按照char类型接收(会接收' '和'\n'字符)scanf中出现非输入控制符,需要原封不动的从终端输入该字符。在使用puts的过程中我们需要注意puts会多打印一个\n,不需要再自行输入换行符。2.if可以脱离else单独使用,但是else不能脱离if单独使用。_%c 接收一个非' '和'\n'的字符。4.scanf中' '和'\n'字符表示数据末尾。3.scanf不能接收带' '的字符串。

2024-07-15 19:42:46 424

原创 day3 变量、表达式与运算符,以及C语言中常用的输入输出函数

例如: \n(换行符)、 \t (制表符)、\b (退格符)、\v (纵向制表符)、\r(回车符)、\\ (\字符)、 \" ("字符)等。算术运算符包括:、+、-、 *、/、%、++(自增运算符)、 -- ( 自减运算符)等。1.short 、char 、int进行数据运算和数据处理时会默认转换为long类型。运算规则:从左到右依次运行,最后一个逗号表达式的结果为整体表达式的结果。%# 打印八进制前的0和十六进制前的0x。赋值运算符包括:= 、+= 、-=、*=、 /=、%=等。

2024-07-13 18:38:56 604

原创 day2 gcc编译器与C语言基础

在日常生活中我们常用十进制,我们都了解十进制的工作原理时逢十进一,以此类推二进制、八进制、十进制、十六进制。我们不仅需要单独的进制机制,还要了解他们之间如何互相转换,其中最重要的是,二进制和十进制之间的互相转换。在使用gcc编译的过程中,我们也会遇到程序错误,程序错误分为两种。当然也不会是真的句句打印,能够大致定位到出错误的段落,对这个段落进行逐步打印。相对于语法错误来说,逻辑错误通常会造成比较大的影响,可能会使整个项目崩溃。调试步骤: 查看代码 -> 设置断点 -> 运行代码 -> 单步执行。

2024-07-12 18:53:50 467

原创 day1 Linux操作系统基础

2024-07-11 18:14:43 201

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除