摘要: system V IPC 1)消息队列 2)共享内存 3)信号灯(信号量集) 1.消息队列、 ipcs -q 查看系统中使用消息队列的情况 ipcrm -q +msqid 删除消息队列 消息队列工作原理:在内核空间上创建队列,信息发送者将发送信息打包成结点添加到队列中,信息的接受者选择性从队列上读取 阅读全文
posted @ 2018-08-01 19:03 子都 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 条件变量的工作原理:对当前不访问共享资源的任务,直接执行睡眠处理,如果此时需要某个任务访问资源,直接将该任务唤醒。条件变量类似异步通信,操作的核心:睡眠、唤醒。 1.pthread_cond_t 定义条件变量 2.初始化条件变量 函数原型:int pthread_cond_init(pthread_ 阅读全文
posted @ 2018-07-31 20:05 子都 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 将一个文件的前一半复制到一个文件,后一半复制到另一个文件,通过两个线程: 阅读全文
posted @ 2018-07-30 20:28 子都 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 1.采用信号量访问:当有段临界代码,需要保证排他的访问一个资源。 2.sudo dmesg -c 消除dmesg缓冲 3.互斥锁:代表的是一种锁资源,互斥锁的工作原理是:保证对共享资源操作的原子性 4.自旋锁:轮循 5.读写锁:奇偶 6.顺序锁:读写可并发,但是会检测信号 互斥锁中: 死锁:(1)互 阅读全文
posted @ 2018-07-30 19:02 子都 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 今天练习代码的时候碰见这样一个问题: 一个文件test.txt,文件内容为 1 2 4 5 在程序中读写这个文件,修改其内容,添加一行,将文件内容变成: 1 2 3 4 5 楼主的错误代码是这样的: 这样编译运行,text1.txt 中 的内容是 1 2 3 4 5 但是text.txt 中会没内容 阅读全文
posted @ 2018-07-28 13:23 子都 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 运行程序时,生产文件里有ABC 3个产品,运行时发现最后一个C产品一直会重复取出,经检查发现:我将produce.txt中的剩余产品复制到temp.txt中,之后再复制回来,我只是将文件读写位置调到了起始,但是以读写方式打开文件produce.txt,其中的产品仍为ABC,将temp.txt中的BC 阅读全文
posted @ 2018-07-22 20:08 子都 阅读(587) 评论(0) 推荐(0) 编辑
摘要: 关于execl()函数族的用法不在赘述,其他博主介绍的很详细。下面说下作者在使用该函数时所犯的错误: 作者想通过使用execl()函数在子进程中调用其他函数,起初楼主是 这样用的: if((a = execl("~/linux_io/3/3.2/3.2.1/2/hello","hello",NULL 阅读全文
posted @ 2018-07-22 16:14 子都 阅读(1124) 评论(0) 推荐(0) 编辑
摘要: 2018.7.8 1.声明结构体时,结构体内部不能赋值。比如 struct student{ char id=0; char score=0; }; 这样大错特错! 2.字符数组 char a[10] 。只有在声明的时候可以这样: char a[10]="xxxxx"; 若 不是声明时,a="xxx 阅读全文
posted @ 2018-07-08 09:55 子都 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 关于 指向二维数组的指针。 int a[2][3]; int *p; int (*p_1)[3]; 可以用p_1 = a ,但是不能用p = a ; 因为此时数组a的数据类型是 int (* x)[3],所以不能用p=a赋值。 可以p=&a[0][0];这样赋值p。 用p_1=a时,*(p_1+1) 阅读全文
posted @ 2018-07-04 14:09 子都 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 作者在 gcc time_3.c -o time_3 ./time_3 1.txt 之后,并没有在1.txt中查看到数据。经过一番搜查后知道了,数据先是存在缓存中,有缓存刷新时,才能从缓存中读出数据写到文件中,然而fprintf()自己读完一行数据后并不能自己刷缓存,需要在sleep(1)上一行加 阅读全文
posted @ 2018-07-03 19:41 子都 阅读(482) 评论(0) 推荐(0) 编辑