- 博客(28)
- 收藏
- 关注
原创 共享内存、网络通信
物理层面数据的传输 --- 一位一位二进制数据 //比特流。用于解决 网络 与 网络之间 数据传输 //数据包。传输控制层,控制传输过程,保证数据完整和可靠。规定了 传输数据的格式 和 方式 //加密。规定了物理层面的电气特性及相关机械特性。规定了 传输数据的格式 //帧数据。就是直接获取要收发的数据。//控制传输过程可靠。3. 网络层 (网际层)1、共享内存(同一主机间通信)osi 7 层参考模型。tcp/ip 五层模型。(1) 产生key值。
2024-08-21 19:31:39
431
原创 信号量与管道通信
注意:sem 申请资源后会自动执行 sem = sem - 1;如果sem没有资源(==0),则线程阻塞等待,一旦有资源。表示进程间使用信号量。如果sem有资源(==1),则申请该资源,程序继续运行。如果此时有任务,在等待这个资源,这个资源直接给对应的任务。可以读管道,但是管道中如果没有数据了,此时读操作 不阻塞。可以读管道,但是管道中如果没有数据了,此时读操作 阻塞。并默认执行,sem = sem+1;
2024-08-16 20:07:40
567
原创 线程锁(2)
带来资源竞争 //专门的技术 解决资源竞争 --- 互斥 同步。进程间共享数据不方便 //进程间通信 (管道,信号,共享内存)//解锁 临界资源访问之后就解开。加锁 //加锁 加在 要访问临界资源的地方。@retval --- 用来保存,退出状态值,所在空间的地址。定义互斥锁 ==》初始化锁 ==》加锁 ==》解锁 ==》销毁。thread //表示要发送的线程的tid号。@thread --- 线程tid。
2024-08-15 20:12:29
238
原创 多线程(1)
宏定义:WIFEXITED() WEXITSTATUS()注意:waitpid 想要处理到子进程必须套在循环中。(3)pthread_join函数:等待线程结束。调用进程 一般不做额外的事情。调用进程 逻辑一般不受影响。(2)获取线程的tid。
2024-08-14 19:17:53
810
原创 多任务编程
1、进程:pcb + txt / bss / data / 栈堆。进程 --- 程序的一次执行的过程。进行中的程序 --- 已在运行中的程序。进度 —— 动态 —— 内存。程序 —— 静态 —— 硬盘。3、man指令 ps查询。进程是程序的一个实例。
2024-08-12 20:32:02
189
原创 文件属性获取
6、perror、error、strerror :指出错误。4、symlink link 软链接、硬链接。5、truncate:扩大缩小空间,清零。1、getpwuid函数。2、getgruid函数。
2024-08-08 19:55:44
137
原创 标准、文件IO
原型: `int open(const char *pathname, int flags, mode_t mode);- 原型: 'int open(const char *pathname, int flags, mode_t mode);功能:将stream流文件中的文件指针从whence位置开始偏移offset字节的长度。功能:获取当前文件流指针的具体位置,一般以文件开头到当前指针的字节数为返回值。的当前末尾位置,则会自动以'\0'来填充文件内容,从。而形成一种被称为"空洞文件" 的特殊文件。
2024-08-06 20:16:45
285
原创 标准IO C库
标准 I/O 函数提供了一种方便、统一和可移植的方式来处理输入和输出。例如,在 C 语言中,常用的标准 I/O 函数包括。标准 I/O 是在 C 语言和许多其他编程语言中用于执行输入和输出操作的一组函数和机制。)通常指将数据输出到屏幕,标准错误()通常指从键盘获取数据,标准输出(用于从输入流中读取一行文本,用于向输出流写入一行文本等。fopen:打开文件。)用于输出错误信息。
2024-08-05 20:12:49
164
原创 shell脚本编写
(2)$#:个数 $?:上个命令是否成功(0成功,1失败) $$:进程ID。1、shell脚本编写:vim xx.sh (开头需写 #!/ bin / bash)输出:“ ” 变量 ‘ ’ 全为常量。chmod +所需权限 xx.sh。(3)输入:read a。(1)环境变量 env。
2024-08-03 18:33:42
133
原创 结构体和链表
int id;通过struct关键字来声明结构体变量结构体变量的操作访问结构体成员使用运算符,如student.id。结构体变量可以通过点运算符直接访问,也可以通过指针访问,使用箭头运算符(->
2024-08-01 19:12:54
1018
原创 指针数组和指向指针的指针
int(*p)(int,int):表示定义一个指向函数的指针变量p,而不是固定的指向哪一个函数,而只是定义了这样一个类型的变量。在 C 语言中,可以定义一个指针变量来指向函数。通过这种方式,可以使用函数指针变量来调用函数,实现动态地选择要执行的函数。指针数组的每个元素都可以指向不同的内存地址或数据。函数可以接受两个参数,其中第二个参数是一个指向指针的指针,通常用于处理命令行参数。指向指针的指针是一种多级指针,它指向的是另一个指针变量的地址。在运行程序时,可以在命令行中输入多个参数,这些参数将被存储在。
2024-07-31 19:31:24
748
原创 字符串与指针
2、字符串被称为匿名数组。指针变量所指向的为字符串常量时,不加const时,也不能被修改。因为字符串常量在字符串常量区,本身就只能读不能写。1、const int *p:指针前可加const修饰,表示无法通过该指针修改指针变量所指向的变量。3、万能指针void *p:可以接收任何类型的指针。int *const p:表示指针变量不能被修改。malloc 和 free 须配对,用完就释放。
2024-07-30 20:32:33
216
原创 局部变量和全局变量
一般情况下,变量的值是存放在内存中的,当程序中用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到运算器中,经过运算器进行运算,如果需要存数,再从运算器将数据送到内存存放。在编译和连接时,系统会由此知道 Num是一个已在别处定义的外部变量,并将在另一文件中定义的外部变量的作用域扩展到本文件,在本文件中可以合法地引用外部变量Num。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。
2024-07-27 20:18:14
260
原创 数组作为函数参数
(3)在被调用函数中声明了形参数组的大小,但在实际上,指定其大小是不起任何作用的,因为C语言编译对形参数组大小不做检查,只是将实参数组的首元素的地址传给形参数组。因此,形参数组名获得了实参数组的首元素的地址,数组名代表数组的首元素的地址,因此,形参数组首元素和实参数组首元素具有同一地址,它们共占同一存储单元指的是同一单元。由于实参可以是表达式,而数组元素可以是表达式的组成部分,因此数组元素当然可以作函数实参,与用变量作实参一样,是单向传递,即“值传送”方式。1、数组元素作函数实参。2、数组名作函数参数。
2024-07-26 19:27:48
200
原创 函数的调用
4、栈区是计算机内存的一部分,主要用于存放函数的局部变量、函数参数和返回地址等信息。在程序执行过程中,每当一个函数被调用,相关的变量和状态信息就会被压入栈中;堆区的内存管理由程序员负责,需要手动释放,由于其动态特性,堆区的内存分配和释放可能会比较频繁。这个区域通常是只读的,以防止程序在运行时修改自己的指令。函数出现在一个表达式中,这种表达称为函数表达式,这是要求函数带回一个确定的值以参加表达式的运算。1、在调用一个函数的过程中又直接或间接的调用该函数本身,称为函数的递归调用。把函数调用作为 一个语句。
2024-07-25 19:41:11
395
原创 二维数组和函数
(4)如果对全部元素赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。(2)将所有的数据写在一个花括号里,按数组顺序对各元素赋初值。3.void型函数可以不加返回值(可以不用写return)。2.没有定义函数类型的函数默认返回值为int型。4.return后的返回值必须与函数类型一致。1、从函数的形式看,分为无参函数和有参函数。注:1.主调函数放在后面,被调函数放在前面。1、二维数组的一般形式为。(1) 分行给二维数组赋初值。(3)可以对部分元素赋初值。
2024-07-24 19:47:48
276
原创 字符数组和字符串
(1)字符数组是用来存储一系列字符的数据结构。(2)在C语言中,字符数组经常用于处理字符串。(3)字符数组以‘\0’(空字符)作为结束标志,表示字符串的结束。(1)定义:使用char关键字定义字符数组。char s[50];表示定义了一个可以存储50个字符的数组。(2)初始化:可以在定义时进行初始化。自动计算数组大小并初始化。
2024-07-23 19:32:56
463
原创 数组的定义和引用
(2)在定义数组时,需要指定数组元素的个数,方括号的常量表达式用来表示元素的个数,即数组长度。(4)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。(3)常量表达式中可以包括常量和符号常量,不能包含程序运行中可变的值。(1)数组名的命名规则和变量名相同,遵循标识符命名规则。1、定义方式:类型说明符 数组名[常量表达式];(1)数组元素的表示形式为 数组名[下标](1)在定义数组时对数组元素赋予初值,用花括号。2、数组必须先定义,然后使用。(2)可以只给一部分元素赋值。
2024-07-22 20:26:18
1123
原创 循环体结构
7、表达式一般是关系表达式(如i<=100)或逻辑表达式(如a<b&&x<y),但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。注:1、for语句的一般形式中的“表达式1”可以省略,此时应在for语句之前给循环。2、如果表达式2省略,即不判断循环条件,循环无终止地进行下去。6、表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的。3、表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束;4、可以省略表达式1和表达式3,只有表达式2,即只给循环条件;
2024-07-20 17:43:19
1039
原创 07/18 444
%m.nf ”表示输出的数一共占m位(包括小数点),小数保留n位有效数字。long 类型的,%d只能输出四个字节,将其他字节忽略,则需用%ld来扩展解决,无符号类型相同(%llu)。float类型对应格式控制符为%f,scanf函数的模式%f 默认为四字节,则double类型对应格式控制符需为%lf;3、在输入和输出之间存在缓冲区,且遵循FIFO(先进先出)的原则。注意:scanf函数的地址列表必须为变量地址,由“&”开头。4、sqrt 平方根函数,pow(x,y)表示x的y次幂。
2024-07-18 19:53:18
205
原创 7/17 333
lvalue:left value(locatable)左值,可以被定义到的(被取到地址的)3、random函数(随机获取一个数)和time的函数(获取时间)了解和使用。int = unsigende short 因为无符号,直接补0。int = short (符号位扩展) 正数补0,负数补1;short = int 高位截断(低位保留,高位丢弃);9、显式转换:变量前加 (类型)强制转化为括号中类型。5、++ 自增对于整形、浮点型、字符型都适用。6、临时变量(匿名变量)通通为右值。
2024-07-17 18:55:12
227
原创 7/16 22222
short(unsigned short):2 范围:-2^15 ~ 2^15-1(0 ~ 2^16)long(unsigned long):8 范围:-2^63 ~ 2^63-1(0 ~ 2^64-1)2、二进制,八进制,十进制,十六进制的相互转化;使用八进制,十六进制的原因:计算机好转化为二进制的01低高电平。int(unsigned int):4 范围:-2^31 ~ 2^31-1(0 ~ 2^32-1)1、标识符的命名规则:使用字母,数字,下划线;3、计算机内存的大小端模式;
2024-07-16 18:17:00
184
原创 2024/7/15 11111
学习熟悉Linux的基本命令:ls(查看) cd(去向) mv(移动) cp(拷贝) rm(删除)等使用的方式;入门C语言,知道变量(代码运行过程中,其值不会发生改变的量)与常量(代码运行过程中,其值会发生改变的量);
2024-07-15 18:14:54
131
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人