I/O&进程&线程
文章平均质量分 92
学习IO、进程线程编程的笔记
Sunqk5665
相信美好的事情终将发生
展开
-
信号灯集和共享内存的综合应用小例子
即想要进程打印信息必须要另一进程完成数组内容的倒置,然后该进程倒置完成一次之后不能就马上再倒置,要打印进程完成对上次倒置内容的打印才可以。要求:使用信号灯集和共享内存实现:一个进程对共享内存存放数据"Nice to meet you"循环倒置,一个进程循环输出共享内存的内容,要确保倒置一次打印一次。分析:这两个进程可以写成两个源文件,一个文件对应一个进程,从题目要求可以看出,这两个进程实现的是一种进程间的。原创 2023-08-19 20:58:59 · 125 阅读 · 0 评论 -
LinuxC编程——标准IO
功能:从stream文件流读取nmenb个数据项存放至ptr所指的数组中,其中每一项数据长度为size大小,故所读取总字节数为size*nmemb。方法一:循环往缓冲区中放入固定大小的数据,直到达到行缓冲满,看一共存入了几个固定大小的数据,从而可算出行缓冲的大小。功能:把以空字符(\0)结尾的字符串输出到指定文件流中,末尾的空字符(\0)并不输出。功能:从ptr所指的数组中写出nmemb个数据项至stream指定的流。功能:将指定的文件流重定向到打开的文件中。参数:stream:文件流。原创 2023-06-04 17:46:33 · 800 阅读 · 0 评论 -
LinuxC编程——文件IO
在C语言的标准IO库中的库函数,如fclose、fopen,、fread、fwrite,提供的是高层服务;而Linux的文件I/O调用提供的是底层的服务,底层的服务不提供缓冲而直接进入操作系统。创建出来的文件权限为指定权限值&(~umask) //umask为文件权限掩码。功能:向指定文件描述符中,写入 count个字节的数据。功能:从一个已打开的可读文件中读取数据。练习:实现Linux下的cp命令。flags:打开文件的方式。文件IO文件打开权限对比。功能:设定文件的偏移位置。参数:fd:文件描述符。原创 2023-06-04 20:01:01 · 488 阅读 · 0 评论 -
LinuxC编程——高级文件操作
当使用别人的函数时除了包含头文件以外还要有库头文件:函数声明、结构体等类型定义、头文件、宏定义库:就是把一些常用函数的目标文件打包在一起,提供相应函数的接口,便于程序员使用;本质上来说库是一种可执行代码的二进制形式由于windows和linux的本质不同,因此二者库的二进制是不兼容的。原创 2023-06-10 18:48:21 · 981 阅读 · 3 评论 -
LinuxC编程——进程
进程创建后,进程进入就绪态,当CPU调度到此进程时进入运行态,当时间片用完时,此进程会进入就绪态,如果此进程正在执行一些IO操作(阻塞操作)会进入阻塞态,完成IO操作(阻塞结束)后又可进入就绪态,等待CPU的调度,当进程运行结束即进入结束态。练习:通过父子进程完成对文件的拷贝(cp),父进程从文件开始到文件的一半开始拷贝,子进程从文件的一半到文件末尾。程序一次执行过程,是动态的,包括创建、调度、执行以及消亡,它是一个独立的可调度的任务。注:exit与return的区别⭐⭐。exit:会刷新缓存。原创 2023-08-10 21:06:18 · 1017 阅读 · 0 评论 -
LinuxC编程——线程
是一个轻量级的进程,为了提高系统的性能引入线程。进程与线程都参与cpu的统一调度。在同一进程中创建的所有线程共享该进程的地址空间线程相关的函数接口原创 2023-08-10 22:08:07 · 184 阅读 · 0 评论 -
LinuxC编程——线程的同步与互斥
我们知道,一个进中的所有线程共享进程的资源,所以可以通过在进程中定义全局变量来完成进程中线程间的通信,但是,当在同一内存空间运行多个线程时,要注意一个基本的问题,就是不要让线程之间互相破坏。例如,我们要实现两个线程要更新两个变量的值,一个线程要把两个变量的值都设成0,另一个线程要把两个变量的值都设成1。如果两个线程同时要做这件事情,结果可能是,一个变量的值是0;另一个变量的值是1。原创 2023-08-11 21:41:46 · 344 阅读 · 0 评论 -
LinuxC编程——进程间通信(一)(管道)
1、早期通信:无名管道(pipe),有名管道(fifo)、信号(sem)2、system V IPC:共享内存(share memory) 、信号灯集(semaphore)、消息队列(message queue)3、BSD:套接字(socket)原创 2023-08-12 20:25:03 · 324 阅读 · 0 评论 -
LinuxC编程——进程间通信(二)(信号、共享内存)
进程间通信:信号的使用以及共享内存的创建原创 2023-08-14 21:12:03 · 215 阅读 · 0 评论 -
Linux编程——进程间通信(信号灯集、消息队列)
System V的信号灯是一个或者多个信号灯的一个集合。其中的每一个都是单独的计数信号灯。而Posix信号灯指的是单个计数信号灯。🚨注意:第一次创建信号灯集,semid为0,不能用,要排除。故第一次创建完之后要删除semid为0的信号灯集,重新创建。用法:第四个参数是一个共用体,需自己创建,共用体第一个参数就是信号灯的值。获取信号灯值:函数semctl(semid, 0, GETVAL)的返回值。删除系统信号灯集:ipcrm -s semid。通过信号灯集实现共享内存的同步操作。原创 2023-08-15 21:30:06 · 271 阅读 · 0 评论