Linux C编程
-西西弗斯
这个作者很懒,什么都没留下…
展开
-
1. 第一个C程序
原创 2021-06-10 12:21:03 · 162 阅读 · 0 评论 -
135. 多线程 - TCP Client端程序
原创 2021-02-12 18:42:31 · 351 阅读 · 0 评论 -
134. 多线程 - TCP服务器多线程访问实现
原创 2021-02-12 17:20:01 · 161 阅读 · 0 评论 -
133. 多线程 - TCP服务器实现
原创 2021-02-11 23:15:54 · 101 阅读 · 0 评论 -
132. 多线程 - TCP服务器创建步骤
原创 2021-02-11 23:14:24 · 207 阅读 · 0 评论 -
131. 多线程 - 知识点回顾
原创 2021-02-11 22:20:34 · 156 阅读 · 0 评论 -
130. 多线程 - 线程与fork
原创 2021-02-11 22:11:07 · 161 阅读 · 0 评论 -
129. 多线程 - 私有数据
原创 2021-02-11 21:37:39 · 138 阅读 · 1 评论 -
128. 多线程 - 线程同步属性
原创 2021-02-11 19:03:46 · 252 阅读 · 0 评论 -
127. 多线程 - 栈属性
原创 2021-02-11 10:11:25 · 200 阅读 · 0 评论 -
126. 多线程 - 分离属性
非分离的线程,需要pthread_join函数去回收由于线程1已经是分离状态,因此调用join函数会失败原创 2021-02-11 09:42:58 · 105 阅读 · 0 评论 -
125. 多线程 - 一次性初始化
原创 2021-02-11 08:24:32 · 170 阅读 · 0 评论 -
124. 多线程 - 条件变量使用
原创 2021-02-08 18:37:31 · 168 阅读 · 0 评论 -
123. 多线程 - 条件变量
原创 2021-02-08 17:57:28 · 92 阅读 · 0 评论 -
122. 多线程 - 读写锁实例
上例,由于thread1/thread2都是读锁,因此两个thread可以同时执行。如果thread1/thread2都是写锁,则一个线程执行完后,另一个线程才可以执行。如果设置为一个读锁,一个写锁。写锁定时,读操作则无法再加锁...原创 2021-02-08 16:34:39 · 174 阅读 · 0 评论 -
121. 多线程 - 读写锁
原创 2021-02-07 17:34:34 · 150 阅读 · 0 评论 -
120. 多线程 - 互斥锁
上面的代码执行没有任何输出,即实现了线程的完全同步。原创 2021-02-07 17:15:53 · 101 阅读 · 0 评论 -
119. 多线程 - 线程同步的必要性
pthread_join: 等待子线程执行完后,才会执行main函数。发现每次执行,三个数值都不同。原创 2021-02-07 08:22:49 · 246 阅读 · 0 评论 -
118. 多线程 - 线程清理程序
push:后push进去的,先pop当用pthread_cleanup_pop(0) 去出栈时,线程不会响应。用pthread_cleanup_pop(1) 去出栈时,线程才会响应。由上结果可以看出,pthread_cleanup_push(second_clean,"thread1") 后被压入,先行popthread1 first clean/thread2 的clean没有被执行,因为线程对pthread_cleanup_pop(0)不响应。将代码的th...原创 2021-02-04 10:31:23 · 177 阅读 · 0 评论 -
117. 多线程 - 信号处理
pthread_join 等待前面线程的结束sigaction:只针对最后执行的那个线程有效。那个线程最后执行,那个线程就会接收到信号。原创 2021-02-04 06:58:43 · 204 阅读 · 0 评论 -
116. 多线程 - 信号默认处理
上面代码,在主线程发kill信号之前,新线程已经结束上面代码,创新新线程,新线程sleep 1秒,等待主线程的kill信号,默认处理方式是退出,不进行任何操作,因此,执行代码不会有输出。??...原创 2021-02-04 06:13:44 · 122 阅读 · 0 评论 -
115. 多线程 - 线程取消
延时到取消点,才会执行取消动作原创 2021-01-25 07:04:46 · 261 阅读 · 0 评论 -
114. 多线程 - 线程连接
看pthread_join()的返回码,成功返回0,错误返回错误码,其中返回值22代表返回EINVAL,该线程不可join。上面的代码,如果将第22行的pthread_detach(pthread_self()) 注释掉,则thread2则变成可join,返回码就变成0book@100ask:~/C_coding/0122$ cat thread_join.c#include <stdio.h>#include <pthread.h>...原创 2021-01-24 08:39:55 · 144 阅读 · 0 评论 -
113. 多线程 - 线程退出
由于sleep语句的作用,子线程先执行如果以exit方式退出,子线程退出,也会导致主线程printf("main thread\n")无法执行原创 2021-01-23 20:39:15 · 171 阅读 · 0 评论 -
112. 多线程 - 线程状态与回收
原创 2021-01-23 20:09:18 · 147 阅读 · 0 评论 -
111. 多线程 - 主线程
这里的12/34/67 是字符串book@100ask:~/C_coding/0122$ cat main_thread.c#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <string.h>#include <unistd.h>struct student{ int age; char name[20]; char i...原创 2021-01-23 19:32:26 · 146 阅读 · 0 评论 -
110. 多线程 - 线程的创建
book@100ask:~/C_coding/0122$ cat thread_create.c #include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <string.h>#include <unistd.h>void print_id(char *s){ pid_t pid; pthread_t tid; pid = getpid(); ...原创 2021-01-23 18:16:19 · 126 阅读 · 0 评论 -
109. 多线程 - 线程的创造与生命周期
book@100ask:~/C_coding/0122$ cat thread_id.c#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <string.h>#include <unistd.h>int main(){ pid_t pid; pthread_t tid; pid = getpid(); tid = pthread_self...原创 2021-01-23 08:38:45 · 95 阅读 · 0 评论 -
108. 多线程 - 什么是线程
进程:获取资源,线程:使用资源多进程开销大的原因:每个进程都会申请各自独立的资源,资源消耗大。多线程:基于同一个进程的多线程,共享母进程资源,这一可以节约资源。CPU轮询每个线程,表面上看起来是多个线程并行执行。一个线程阻塞时,可以继续执行其它线程,提高并发性...原创 2021-01-23 08:23:26 · 114 阅读 · 0 评论 -
107. 进程间通信 - 信号灯集信号量实现进程间同步通信
Synaphore原创 2021-01-21 12:51:24 · 260 阅读 · 0 评论 -
106. 进程间通信 - 信号灯集信号量实现父子进程同步通信
semctl:还可以初始化信号量/联合体的初始化semop:可以进行pv操作,涉及到结构体初始化原创 2021-01-21 07:52:36 · 370 阅读 · 0 评论 -
105. 进程间通信 - POSIX信号量实现父子线程同步通信
POSIX原创 2021-01-20 18:29:14 · 224 阅读 · 0 评论 -
104. 进程间通信 - 信号灯集创建/删除
semget:信号灯集的创建,类似于消息队列创建semctl:信号灯集删除原创 2021-01-20 18:22:55 · 178 阅读 · 0 评论 -
103. 进程间通信 - 消息队列实现双向通信
通过管道/共享内存实现双向通信,需要至少用到两个管道或两个共享内存使用消息队列实现双向通信,只需要一个消息队列。通过创建父子进程的方式,父进程发/子进程收,或父进程收/子进程发,通过不同的msgid来区分收发内容。如上代码,发现一端发数据,另一端一旦收到数据就马上停止接受,是因为上面的代码没有把读数据放在while循环里面,循环读。运行,发现服务器/客户端就可以实现双向通信了。...原创 2021-01-20 07:18:00 · 804 阅读 · 0 评论 -
102. 进程间通信 - 消息队列实现单向通信
管道里面的队列:顺序队列消息队列:链式队列本次实现无亲缘关系间进程通信ftok基于同一个文件,创建唯一的key。基于唯一的key实现两个进程通过内核空间同一个消息队列进程通信运行代码,发现write.c写入的内容,可以实时被读程序read.c读出消息队列有两个特点:1. 读完后就自动删除,相对于出队列2. 读的时候可以设置为阻塞方式...原创 2021-01-20 06:41:25 · 334 阅读 · 0 评论 -
101. 进程间通信 - 消息队列 读/写
消息队列:链式队列1. msgget 函数,消息队列创建,有两个输入参数。第一个输入参数key,有两种来源,IPC_PRIVATE/有亲缘关系进程之间的通信,ftok/无亲缘关系间进程通信。第二个输入参数是权限/以及相应的标志。返回值是ID号,代表内核不同的ID,不同的消息队列2. msgctl 函数,消息队列删除,该函数不仅可以删除消息队列,还可以读取/修改消息队列的属性。它有三个输入参数。第一个参数是消息队列的ID号。第二个参数是宏,宏有三种传入方式。如果删除的是ipc_rm原创 2021-01-20 06:10:22 · 213 阅读 · 0 评论 -
100. 进程间通信 - 消息队列 创建/关闭
1. msgget:创建或打开消息队列,相当于open2. msgctl:关闭消息队列,相当于close3. msgsnd:发送消息队列,相当于write(插入消息队列)4. msgrcv:接收消息队列,相当于read(删除消息队列)msgctl:删除消息队列上例实现了消息队列的成功创建。上例实现了消息队列的创建与删除...原创 2021-01-19 10:21:44 · 336 阅读 · 0 评论 -
99. 进程间通信 - 无亲缘关系进程 通过共享内存案例
上一节,实现了有血缘关系的父子进程的单向通信。如果要实现双向通信,则需要建立两个共享内存,分别实现两个方向上的通信。root@100ask:/home/book/C_coding/0113# cat shmctl.c#include "sys/types.h"#include "sys/shm.h"#include "signal.h"#include "unistd.h"#include "stdio.h"#include "stdlib.h"#include "string.h"v原创 2021-01-18 23:52:15 · 571 阅读 · 0 评论 -
98. 进程间通信 - 父子进程 通过共享内存案例
1. shmget:共享内存创建函数,在内核空间创建缓存2. shmat:将内核的缓存映射到用户空间的地址3. shmdt:内核空间的缓存使用完后,在用户空间是否内核缓存映射到用户空间的地址4. shmctl:内核空间的缓存使用完后,释放内核空间的共享缓存5. ftok:用来创建key值,key值是shmget函数的第一个参数。key用于无血缘关系的进程间通信,IPC_PRIVATE用于有血缘关系的进程间通信本节案例:父进程写入,子进程读出,是一个单向通信的过程。root@10原创 2021-01-18 21:50:56 · 548 阅读 · 0 评论 -
97. 进程间通信 - 共享内存对象删除 shmctr/shmdt
shmget: 创建共享内存shmat:共享内存映射函数调用shmget:会在内核中创建一段缓存,该缓存叫做共享内存调用shmat:内核会将该共享内存映射到用户空间,方便用户进程的读写操作(如果没有这个映射,用户空间进程对内核共享内存的操作,每次都需要进入内核,然后进行读写操作,如果通过shmat将共享内存映射到用户空间,则可避免频繁进入内核,提高效率)当这段共享内存使用完毕后,我们应该将内核空间的这段缓存释放,同意shmat映射过去的用户空间的内存地址空间也要被释放。否则,内核里面的共享内原创 2021-01-18 18:19:44 · 394 阅读 · 0 评论