- 博客(31)
- 收藏
- 关注
原创 Linux——进程间通信
父子进程间如何实现信息沟通,之前了解到的有:父进程创建子进程,子进程是从父进程那里copy某些数据过来。只是子进程子进程退出的时候,调用exit(0),然后父进程调用wait(status)等待子进程退出获取子进程退出状态信息,把退出码返回给父进程,可通过宏来读取退出码。还有的就是,exec族函数,如让A进程去启用B进程,A后面的代码就不跑了,去跑的。但综上都不是真正意义上的通信,真正的通信,通过一进程写入信息,二进程可以读取,二进程写入信息,一进程可以读取。
2023-03-28 15:01:27
787
原创 Java——GUI(图形用户界面)
AWT是用于创建图形用户界面的一个工具包,它提供了一系列用于实现图形界面的组件,如窗口、按钮、文本框、对话框等。在JDK中针对每个组件都提供了对应的Java类,这些类都位于iava.awt包中,接下来通过一个图例来描述这些类的继承关系,如图所示从图的继承关系可以看出,在AWT中组件分为两大类,这两类的基类分别是Component和MenuComponent。
2023-03-28 15:00:58
7424
2
原创 JAVA——GUI
其中,AWT是SUN公司最早推出的一套API,它需要利用本地操作系统所提供的图形库,属于重量级组件,不跨平台,它的组件种类有限,可以提供基本的GUI设计工具,却无法实现目前GUI设计所需的所有功能。随后,SUN公司对AWT进行改进,提供了Swing组件,Swing组件由纯Java语言编写,属于轻量级组件,可跨平台,Swing不仅实现了AWT中的所有功能,而且提供了更加丰富的组件和功能,足以满足GUI设计的一切需求。Container类表示容器它是一种特殊的组件,可以用来容纳其他组件。
2023-03-27 10:29:38
203
原创 Linux——进程
程序是静态的概念,gcc xxx.c -o pro磁盘中生成的pro文件,叫做程序进程是程序的一次运行活动,通俗点的意思就是程序跑起来了,系统中就多了一个进程每个进程都有一个非负整数表示唯一的ID,叫做pid,类似身份证pid=0;成为交换进程(sweapper) 作用:进程调度pid=1;init进程 作用:系统初始化编程调用getpid函数获取自身的进程标识符 getppid获取父进程的进程标识符。
2023-03-21 14:06:33
155
原创 文件I/O
write()的返回值通常与count不同,因此需要循环将全部待写的数据全部写入文件。fd:读操作从文件的当前位移量处开始,在成功返回之前,该位移量增加实际读取的字节数。数,则每次写操作前,将文件位移量设置在文件的当前结尾处,在一次成功的写操作后,该。write()出错的常见原因:磁盘已满或者超过了一个给定进程的文件长度限制。write()调用成功返回已写的字节数,失败返回-1,并设置errno。关闭一个文件的同时,也释放该进程加在该文件上的所有记录锁。调用成功返回0,出错返回-1,并设置errno。
2023-03-14 20:39:08
52
原创 Linux主控 ——链表操作
在Linux内核里,大量使用了链表操作,list_head设备管理、驱动管理、内存管理、等待队列、中断资源·list_head使用。
2023-03-14 10:25:18
278
原创 C 语言条件编译
if 的用法#if、#elif、#else 和 #endif 都是预处理命令,整段代码的意思是:如果宏 _WIN32 的值为真,就保留第 4、5 行 代码,删除第 7、9 行代码;如果宏 __linux__ 的值为真,就保留第 7 行代码;如果所有的宏都为假,就保留第 9 行代码。这些操作都是在预处理阶段完成的,多余的代码以及所有的宏都不会参与编译,不仅保证了代码的正确性,还减小 了编译后文件的体积。这种能够根据不同情况编译不同代码、产生不同目标文件的机制,称为条件编译。
2023-03-13 11:20:34
549
原创 C 语言中几个预定义宏
预定义宏就是已经预先定义好的宏,我们可以直接使用,无需再重新定义。:表示当前源代码的行号;:表示当前源文件的名称;:表示当前的编译日期;:表示当前的编译时间;:当要求程序严格遵循。标准时该标识被赋值为。程序时该标识符被定义。
2023-03-13 10:42:28
149
原创 C 语言宏参数的字符串化和宏参数的连接
用来将宏参数转换为字符串,也就是在宏参数的开头和末尾添加引号。称为连接符,用来将宏参数或其他的串连接起来。可以发现,即使给宏参数“传递”的数据中包含引号,使用。仍然会在两头添加新的引号,而原来的引号会被转义。功能就是让输入的参数加上双引号变为字符串,
2023-03-13 10:31:40
1024
原创 C 语言预处理命令
而 函数是一段可以重复使用的代码,会被编译,会给它 分配内存,每次调用函数,就是执行这块内存中的代码。可以含任何字符,它可以是常数、表达式、if 语句、函数 等,预处理程序对它不作任何检查,如有错误,只能在编译已被宏展开后的源程序时发现。而 typedef 是在编译阶段由编译器处理的,它并不是简单的字符串替换,而给原有的数据类型起一个新的名字,将它作为一种新的数据类型。宏定义只是简单的字符串替换,由预处理器来处理;在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实际参数”,这点和函数 有些类似。
2023-03-13 10:01:14
97
原创 链表(静态添加、动态遍历)
struct test{ int data; struct test *next;};void printLink(struct test *head){ struct test *p = head; while(p != NULL) { printf("%d ",p->data); p=p->next; } .
2021-06-27 11:35:10
102
2
原创 单链表的定义、插入
不带头结点typedef struct LNode{ int data; struct LNode* next;}LNode,*LinkList;bool InitList(LinkList &L){ L=NULL; return true;}void test(){ LinkList L; InitList(L); ...}
2021-06-19 18:19:32
154
原创 typedef关键字----数据类型重命名
使用方法: typedef (数据类型) (别名)例如:typedef int zhensghu;typedef int* zhengshuzhizheng;//int a;int* p;就可以写为:zherngshu a;zhengshuzhizheng b;
2021-06-19 17:28:01
431
原创 数据结构顺序表的基本操作—插入
#include <stdio.h>#include <stdlib.h>#define MaxSize 10typedef struct{ int data[MaxSize]; int length;}SqList;void InitList(SqList &L){ int n; L.length=0; printf("你想输入几个数据:\n"); scanf("%d",&n); if(n>=MaxSize) { pri.
2021-06-17 16:52:17
5254
2
原创 顺序表的动态分配
#include<stdio.h> //输入输出需要的头文件#include<stdlib.h> //mallc函数和free函数需要的头文件#define InitSize 10 //定义顺序表的初始长度typedef struct{ int* data; //动态分配数组的指针 int MaxSize; //顺序表的最大容量 int length; //顺序表的当前长度}SqList; //创建顺序表void In.
2021-06-15 17:03:55
329
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人