- 博客(28)
- 收藏
- 关注
原创 进程间通信 有名管道和信号
进程间通信----信号,也称为软中断,在软件层面上实现一个类似中断的过程。参数:pathname 要创建的管道文件名。信号本身不能传递大量数据,是一种异步的通信方式。mode 文件权限。两个无亲缘关系的进程通过有名管道进行通信。管道中数据遵循fifo读写规则,先进先出。函数 mkfifo 创建一个有名管道。返回值: 成功 0,失败 -1;可以在父进程回收子进程效率更高。在信号处理函数中判断对应的信号。两文件通过管道文件传递信息。文件大小为0 bytes。有名管道是一种特殊文件。系统中有一个对应名称。
2024-08-17 20:05:17
136
原创 信号量及进程间通信
参数: @pipefd //用来获取 管道的两端 //读端pipefd[0] //写端pipefd[1] ,其中为文件描述符。3. 信号量的PV操作 (核心) sem_wait()/ sem_post() ---生产者 消费者 模型。信号量集() //信号量 (6)有资源可用,直接使用,资源个数减一 ,如果没有资源可用,此时等待。如果sem没有资源(==0),则线程阻塞等待,一旦有资源。如果sem有资源(==1),则申请该资源,程序继续运行。
2024-08-16 19:51:22
690
原创 【无标题】
int pthread_cancel(pthread_t thread) 参数为要发送线程的tid 成功返回0,失败返回错误码。静态初始化 ,定义的同时并初始化 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;(2)pthread_detach //可分离属性 , 子线程运行很久才结束,一般在线程创建好后设置分离状态,不关心线程退出状态。
2024-08-15 21:11:48
411
原创 进程的退出函数及线程
函数的第2个参数为void**,为二重指针,接收的是线程中函数pthread_exit(void∗retval)的参数可以用来查看pthread_exit传递的参数(如果不关心退出状态,phtread_join的这个参数可以置空,即phtread_ join(tid,NULL), 函数在线程退出时,用来清理线程资源。如果成功,wait会返回被收集的子进程的进程ID,如果调用进程没有子进程,调用就会失败,此时wait返回-1,@retval //退出状态值 //传的是,退出状态值 对应的地址。
2024-08-14 19:26:35
585
原创 exec函数族
exit() 函数与 _exit() 函数最大的区别就在于 exit() 函数在终止当前进程之前要检查该进程打开了哪些文件,并把文件缓冲区中的内容写回文件,就是图中的“清理IO缓冲”的表述。当程序执行到 exit() 函数或者 _exit() 函数时候,进程 会 无条件停止剩下的所有操作,清除各种数据结构,并终止本进程的运行。但是,这两函数还是有区别的,return 表示的是把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回,返回时可附带一个返回值,由return后面的参数指定。
2024-08-13 21:19:50
722
原创 目录函数及常用函数
函数 link 创建硬链接文件,两个文件关联一个存储地址,不能链目录,一个被删另一个无影响 // ln 1 2。函数 symlink 创建一个链接向oldpath文件的新符号链接文件 //软链接,类似快捷方式。参数: oldpath:被链接向的文件的路径, newpath:新符号链接文件。参数: oldpath:要链接向的文件 ,newpath:创建的新硬链接文件。返回值:成功返回1970年到现在的秒数 ,失败返回-1。函数 ctime 将时间秒数转化成字符串。
2024-08-08 21:05:29
721
原创 对目录的操作函数
参数: buf:保存工作路径空间的首地址, size:保存路径空间的长度。参数: path: 文件或路径 ,buf: 属性存放空间的首地址。返回值:包含文件信息的结构体,出错或者读到目录流末尾返回NULL。返回值: 成功返回包含路径空间的字符串首地址 ,失败返回NULL。功能:从目录流中读取文件信息并将保存信息的结构体地址返回。返回值:成功返回目录流指针,失败返回NULL。返回值: 成功返回0, 失败返回-1。返回值: 成功返回0 ,失败返回-1。返回值: 成功返回0 ,失败返回-1。
2024-08-07 20:48:29
334
原创 缓冲区及文件IO的学习
使指针复位到起始位置。O_EXCL,需要和O_CREAT同时使用,表示新建的文件不能存在,成功,否则open就会失败。功能:将stream流文件中的文件指针从whence位置开始偏移offset字节的长度。参数:fd:文件描述符,buf:要写入文件的字符串的首地址,count:要写入字符的个数。参数:fd:文件描述符,buf:存放数据空间的首地址,count:要读到数据的个数。返回值:成功返回读到数据的个数,失败返回-1,读到文件结尾返回0。参数:stream 要移动文件指针的目标文件流对象。
2024-08-06 20:22:48
668
原创 【无标题】
eg : ====》stdio.h ===>stdio.c==>libc.so ==>/usr/lib so 动态库。I: 键盘是标准输入设备 ====》默认输入就是指键盘 /dev/input。man xxx == man 1 xxx ===>查看当前xxx命令。man 2 xxx ===>查看xxx对应的系统调用函数。man 3 xxx ===》查看xxx对应的标准库函数。流对象 ===》头 《===数据====》尾。fgetc/fputc,,,,,,一个字符,
2024-08-05 19:38:02
354
原创 Linux系统编程shell脚本的学习
test -eq 相等 test 10 -eq $i [ $i -eq 10 ] if( a == 10)shell编程:解释型语言,边翻译边执行,擅长文件处理,操作系统管理,开发效率高 cp 1 2,执行效率低,移植性好。.c :编译型语言,先编译再执行,擅长数据计算和数据处理,开发效率低,执行效率高,移植性差。数学运算a=2 b=3 c=`expr $a \* $b` \*代表*'':打印字符串,遇到$变量依然打印$变量。``:将中间的字符串按照命令打印。
2024-08-03 19:13:50
335
原创 共用体及枚举类型及位运算
十进制的5,该数二进制为 0000 0101,将该数左移3为0010 1000,转换成十进制为 40, 验证了上面的结论:5左移三位就等于5乘以2的三次方等于40。即:0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。即:0 | 0= 0 ,0 | 1= 1,1 | 0= 1, 1 | 1= 1。即:0 ^ 0= 0 ,0 ^ 1= 1,1 ^ 0= 1, 1 ^ 1= 1。enum Week声明week取值范围。即:~0 = 1 , ~1= 0。
2024-08-02 20:26:46
401
原创 结构体及单向链表的学习
应当说明struct student是一个类型名,它和系统提供的标准类型(如int、char、float、 double 等)一样具有同样的作用,都可以用来定义变量的类型,只不过结构体类型需要由用户指定。(2、结构体成员按照结构体成员声明先后次序依次存放,并且每个成员的首字节放置的位置必须能够整除成员的字节数;(3、如果结构体某个成员的字节数大于CPU的字节数,则最长按照CPU的字节数对齐;有头链表,从栈区开空间作首节点,由头指针pHead-->首节点-->头节点。结构体的初始化是按声明顺序依次初始化。
2024-08-01 19:39:17
364
原创 指向数组的指针及指向函数的指针
如void printString(char **s,int len);p指向一个长度为10的一维整型数组;函数名为函数自身的入口地址,间接访问函数,用于降低程序耦合性。pfn指向两个int型参数,返回值为int的函数。一个指针数组做实参传递形参为指针的指针。二维字符数组的打印,逆序,排序及查找。char *s[3] 指针数组。求二维数组元素和及打印二维数组。三,指针数组及指针的指针。求二维数组每行平均值。
2024-07-31 19:37:49
123
原创 字符串与指针
向堆区申请的连续的字节,返回值为连续的字节的首字节地址,申请用完后要销毁。无法通过该指针修改p指向的变量。= NULL)代表申请到了,申请不到空间返回NULL。q - p 表示两指针之差的基类型,表示pq地址间前后关系。万能指针不能进行指针运算,可以接收任意地址。strncat从源中取前n个字符链接到目标。则i的值被改为100。销毁前p的地址不能改变,销毁后使指针置空。strncpy从源中拷n个字符到目标。三,万能指针void *p。可以通过指针间接修改i。
2024-07-30 20:43:24
217
原创 指针变量及传参的学习
printArray(a + 1,len - 2)表示打印数组从第二个元素开始向后打印len - 2个。p + n 在p基础上向后偏移n * sizeof(基类型)个字节。d中保存i的地址,通过指针p间接访问i。打印数组a[i]可替换为*(a + i)或*a++(2)从定位处向后偏移sizeof(基类型)将指针变量p置为空值,表示当前指针p不可访问。*&i为i的值,&*p,*&p为p装的地址。“*”为类型说明符,说明为指针类型。int *p 为初始化p为随机地址。1,指针为装地址的数据类型。
2024-07-29 19:02:19
318
原创 标识符作用域和可见性
3.两个或两个具有包含关系的不同作用域中定义的同名标识符,外层标识符在内层不可见。4,在函数或全局变量前加static,限制使用范围只能在本.c文件使用。形参也是局部变量,局部变量未初始化为随机数,全局变量未初始化全清0;#define N N为标识符,定义宏名字,宏名大写。2,在无包含关系的作用域中定义的同名标识符互不影响。在{}中的为局部作用域,不在任何{}中为全局作用域。1,auto自动变量,变量i的空间自动存储。4,同一作用域中不得定义同名标识符。1,标识符必须先定义在使用’
2024-07-27 20:38:11
136
原创 数组作为函数参数
用数组元素作实参,向形参传递数组元素的值,数组名做实参向形参传递的是数组首元素地址。如:void printArray(a,len) 实参传数组名和数组元素个数。const char*src 形参可为字符数组名或字符串常量。数组元素做函数实参从实参到形参,是值传递的方式。字符串的复制,连接,比较等函数。传参需要数组名和二维数组行数。二维数组中字符数组做函数参数。二,一维数组名做函数参数。一维数组中查找元素的函数。一,数组元素作函数实参。三,字符数组作函数参数。四,二维数组做函数参数。不用传数组元素个数,
2024-07-26 20:14:50
148
原创 函数的调用
在调用函数f的过程中,又要调用f函数,这是直接调用本函数,如果在调用f1函数过程中要调用f2函数,而在调用f2函数过程中又要调用f1函数,就是间接调用本函数,这两种递归调用都是无终止的自身调用,会使栈区消耗完使程序崩溃。(1)栈区,保存返回地址,函数形参及定义的变量。栈先进后出,后进先出,保护现场。实参向形参只能值传递,无法在被调函数中修改主调函数。逻辑结果为整型,被调函数发现错误无法通知主调函数。传参方向自右向左 add(i,j) 先传j再传i。递归求斐波那契数列第n个数。(4)静态区(全局区)
2024-07-25 20:20:26
211
原创 二维数组及函数
列 cols = sizeof(a[0]) / sizeof(a[0][0])行 rows = sizeof(a) / sizeof(a[0])被调在前,主调在后。return默认返回值为int。类型说明符 数组名[常量表达式][常量表达式]a[3][4] 三个长度为4的一维整型数组。a[ ][4]靠近变量名的可省略。二维数组地址等于数组首元素地址。查找一个一维数组是否在二维数组中。实参与形参个数相同,类型匹配。类型标识符 函数名(形参)类型标识符为结果的数值类型。
2024-07-24 20:00:54
129
原创 二分查表法及字符数组
先把乱序的数组按升序排序,在数组中定义一个中间数a[mid] ,mid=(begin+end)/2,用n 与a[mid]比较,再细分区间,具体如下。fgets(s,sizeof(s) / sizeof(s[0]),stdin)输入字符大于字符个数停止输入。strcmp(字符串1,字符串2),比较字符串1字符串2。(2)如果字符串1>字符串2,则函数值为一个正整数。(3)如果字符串1<字符串2,则函数值为一个负整数。(1)如果字符串1=字符串2,则函数值为0。(1) puts() 输出字符串。
2024-07-23 19:02:15
209
原创 利用一维数组处理数据
(2)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。a[10],表示a数组有10个元素,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。不存在数组元素a[10]。t = a[10],其中“[]”为下标运算符,int a[10]中“[]”不是下标运算符是类型说明符说明a为数组。(3)连续性,a[0]a[1]a[2]...a[9]连续存放。数组越界访问,a[10],a[-1],可能会修改部分字节内容。
2024-07-22 21:51:53
226
原创 C语言循环控制结构
continue 语句和break语句的区别是:continue语句只结束本次循环,而不是终止整个循环的执行。(2)求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。continue:其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。如图,对要跳转的语句命名loop ,在要跳转的地方输入goto loop,即构成循环结构。(5)循环结束,执行for语句下面的一个语句。
2024-07-20 19:33:40
774
原创 关系逻辑运算符及if,switch语句的学习
例如,a>3是一个关系表达式,大于号(>)是一个关系运算符,如果a的值为5,则满足给定的“a>3”条件,因此关系表达式的值为“真”(即“条件满足”);如果a的值为 2,不满足“a>3”条件,则称关系表达式的值为“假”。“&&”和“||”是“双目(元)运算符”,它要求有两个运算量(操作数),如(a>b)&&(x>y),(a>b)||(x>y)。(非)→&&(与)→||(或),即“!在执行if语句时先对表达式求解,若表达式的值为0,按“假”处理,若表达式的值为非0,按“真”处理,执行指定的语句。
2024-07-19 20:45:20
249
原创 C语言输入输出函数的学习
即一个C程序可以由若干个源程序文件(分别进行编译的文件模块)组成,一个源文件可以由若干个函数和预处理命令以及全局变量声明部分组成 一个函数由数据声明部分和执行语句组成。表达式语句由一个表达式加一个分号构成,最典型的是,由赋值表达式构成一个赋值语句。一个语句必须在最后出现分号,分号是语句中不可缺少的组成部分,而不是两个语句间的分隔符号。“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。%md,m为指定的输出字段的宽度,如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
2024-07-18 19:01:46
548
原创 C语言算术运算符和赋值运算符表达式的学习
printf("%d\n",i + j) 中i + j为临时变量,临时变量为右值,放赋值运算符右边。%的左右操作符为整型或与整型兼容,结果符号与左操作数符号一致,%结果小于右操作数。int = short 符号位扩展正数空穴补0负数空穴补1。4.( )强制转换运算符讲一个表达式转换为所需类型,(显式转换)。判断是否为左值可以对其取地址&,能取地址为左值,否则为右值。i++先复制一个临时变量再对i加1,++i的效率高于i++。顺序求职运算符自左向右,逗号表达式结果为最后一个子式结果。
2024-07-17 18:24:05
150
原创 C语言数据类型的学习
有符号长整型[signed] long [int],8个字节,范围(-2)^63~(2)^63 -1。有符号短整型[signed]short [int],两个字节,范围(-2)^15~(2)^15 -1。有符号基本整型[signed] int,4个字节,范围(-2)^31~(2)^31 -1。无符号短整型unsigned short [int],两个字节,范围0~(2)^16 -1。无符号长整型unsigned long [int],8个字节,范围0~(2)^64 -1。
2024-07-16 18:18:24
589
原创 Linux常用命令及C语言常量变量基础学习
C语言变量:在程序运行时可以改变的值,每个变量随机分配到内存空间中。今天学习了Linux基本的终端命令格式。C语言常量:在程序运行时不会改变的值。ls:查看当前文件夹下的内容。parameter:参数。简单的Linux常用命令。command:命令名。-options:选项。mkdir:创建文件夹。pwd:打印工作目录。touch:创建文件。
2024-07-15 18:46:13
79
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人