笔记
文章平均质量分 86
suxusong
这个作者很懒,什么都没留下…
展开
-
网络编程-广播通信以及组播通信的例子
单播(unicast)任播(anycast)组播(multicast)广播(broadcast)注: 广播和组播都需要使用UDP,都不能使用TCP地址表示方式:IPv4地址的表示 {子网id:192.168.1, 主机id:12}A/B/C/D/E五类地址,-1表示所有位都为1 的字段子网广播地址,{子网id ,-1},指定子网所有接口的广播地址192.168.177.0/24 该子网上的广播地址192.168.177.255受限广播地地址 {-1 , -1}255.255原创 2020-07-25 15:47:43 · 1032 阅读 · 1 评论 -
网络编程-复用I/O-select、epoll的用法
阻塞式I/O非阻塞式I/OI/O复用(select/epoll)信号驱动I/O异步I/O原创 2020-07-24 19:14:49 · 164 阅读 · 0 评论 -
网络编程-多进程并发TCP服务器
send函数: 发送数据原函数:ssize_t send(int sockfd, const void *buf, size_t len, int flags);参数:sockfd,是由socket函数返回的套接字描述符 buf,要发送的数据 len,要发送的数据的大小 flags,一个标志位recv函数: 接收数据原函数:ssize_t recv(int sockfd, void *buf, size_t len, int flags);参数:sockfd,由socket函数返原创 2020-07-23 21:00:27 · 332 阅读 · 0 评论 -
网络编程-基于TCP/UDP的客户端获取服务器时间例子
TCP传输控制协议向用户进程提供可靠的全双工字节流(字节流:给每一个字节编序)UDP用户数据报协议是一种无连接的协议获取时间服务的客户端client#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include &原创 2020-07-23 11:18:58 · 1363 阅读 · 0 评论 -
基于多线程的TCP并发服务器的创建及相关函数
线程:有时又称轻量级进程,程序执行的最小单位,系统独立调度和分派CPU的基本单位,它是进程中的一个实体一个进程中可以有多个线程,这些线程共享进程的所有资源,线程本身只包含一点必不可少的资源。优势:在多处理器中开发程序的并行性在等待慢速IO操作时,程序可以执行其他操作,提高并发性模块化的编程,能清晰的表达程序中独立事件的关系,结构清晰占用较少的系统资源线程创造:获取ID线程控制:终止、连接、取消、发送信号、清除操作线程同步:互斥量、读写锁、条件变量线程高级控制:一次性初始化、线程属性、同原创 2020-07-21 11:18:58 · 397 阅读 · 0 评论 -
Linux中线程的高级控制-线程私有属性、线程与fork
线程私有属性 应用程序设计中有必要提供一种变量,使得多个函数多个线程都可以访问这个变量(看起来是个全局变量),但是线程对这个变量的访问都不会彼此产生影响(貌似不是全局变量哦),但是你需要这样的数据,比如errno。那么这种数据就是线程的私有数据,尽管名字相同,但是每个线程访问的都是数据的副本。 在使用私有数据之前,你首先要创建一个与私有数据相关的键,要来获取对私有数据的访问权限 。这个键的类型是pthread_key_tpthread_key_create函数: 创建私有数据的键原函数:int原创 2020-07-20 10:52:35 · 210 阅读 · 0 评论 -
Linux中线程的高级控制-一次性初始化、线程的分离属性、栈属性及同步属性
一次性初始化 有些事需要且只能执行一次(比如互斥量初始化)。通常当初始化应用程序时,可以比较容易地将其放在main函数中。但当你写一个库函数时,就不能在main里面初始化了,你可以用静态初始化,但使用一次初始(pthread_once_t)会比较容易些。 首先要定义一个pthread_once_t变量,这个变量要用宏PTHREAD_ONCE_INIT初始化。然后创建一个与控制变量相关的初始化函数。pthread_once_t once_control = PTHREAD_ONCE_INIT;vo原创 2020-07-18 17:50:33 · 211 阅读 · 0 评论 -
线程的同步-互斥量、读写锁及条件变量
互斥量 当多个线程共享相同的内存时,需要每一个线程看到相同的视图。当一个线程修改变量时,而其他线程也可以读取或者修改这个变量,就需要对这些线程同步,确保他们不会访问到无效的变量。 为了让线程访问数据不产生冲突,这要就需要对变量加锁,使得同一时刻只有一个线程可以访问变量。互斥量本质就是锁,访问共享资源前对互斥量加锁,访问完成后解锁。 当互斥量加锁以后,其他所有需要访问该互斥量的线程都将阻塞。互斥量用pthread_mutex_t类型的数据表示,在使用之前需要对互斥量初始化 1)、如果是动态分原创 2020-07-16 21:43:22 · 213 阅读 · 0 评论 -
linux中线程的基本控制--信号的处理及清理程序
pthread_kill函数: 发送信号原函数:int pthread_kill(pthread_t thread,int sig)参数:thread,线程的id sig,要发送的信号返回值:成功返回0,失败返回错误码作用:向指定ID的线程发送sig信号,如果线程代码内不做处理,则按照信号默认的行为影响整个进程,也就是说,如果你给一个线程发送了SIGQUIT信号,但线程却没有实现signal处理函数,则整个进程会退出。如果第二个参数是0 ,这就是一个保留信号,其实并没有发送信号,作用是用来判断原创 2020-07-16 16:07:47 · 361 阅读 · 0 评论 -
ubuntu中shell常用命令及vi编辑器基础以及shell脚本基础
ls //显示当前目录文件 ls -a //显示隐藏文件 ls -l //显示文件信息 ls -al //显示所有文件及信息cd //进入目录 cd Desktop 进入桌面 cd /mnt/hgfs 进入共享文件 cd … //返回上一级 cd …/…/ 返回上上一级pwd //显示当前目录uname //系统信息查看 uname -a //查看全部信息clear //清屏 实际没清,切到下一页cat //显示文件内容 cat 123.t原创 2020-07-16 11:31:03 · 837 阅读 · 0 评论 -
linux中线程的基本控制--创建、退出、连接及取消
pthread_create函数: 线程创建原函数:pthread_create(pthread *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_routine)(void *), void *restrict arg)参数:新线程ID,如果成功则新线程的ID回填充到tidp的内存 线程属性(调度策略,继承性,分高性) 回调函数(新线程要执行原创 2020-07-14 19:39:59 · 313 阅读 · 0 评论 -
有名管道-非父子进程间通信
有名,即文件系统中存在对应文件节点,每个文件节点都有一个inode号。open: 普通文件mkfifo: 创建管道socket:创建套接字mknod:字符设备文件mkdir: 目录文件mkfifo函数: 创建管道文件函数形式:int mkfifo(const char * filename, mode_t mode);参数:管道文件名;权限,文件权限仍然和umask有关返回:成功返回0,失败返回-1创建有名管道mkfifo,打开open,读read,写write,关闭close。非父子原创 2020-07-09 10:37:33 · 699 阅读 · 1 评论 -
无名管道-父子进程间通信
管道文件是一个特殊文件,它由队列实现的。在文件IO中,创建、打开一个文件是由open函数实现,但是无名管道不能用open创建,对应的函数是pipe。 无名管道读完就删除,再读就阻塞;缓存满了,也会阻塞。只能在父子进程(有亲缘关系的进程)间通信。pipe函数: 创建管道函数原型:int pipe(int fd[2]);头文件:unistd.h参数:文件描述符。fd[0]是读端口,fd[1]是写端口。返回:成功0,出错-1.例:int ret=pipe(int fd[2]);write函原创 2020-07-08 21:56:34 · 1647 阅读 · 0 评论 -
消息队列-无亲缘关系进程通信
消息队列不像共享内存的流程,它不需要信号通知。消息队列的另一个特点:信息读取完自动删除;可以阻塞msgget函数: 消息队列创建头文件: #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h>函数原型: int msgget(key_t key, int flag);参数: key,和消息队列关联的key值 flag,消息队列的访问权返回: 成功,消息队列ID原创 2020-07-08 21:37:07 · 1688 阅读 · 2 评论 -
共享内存-父子进程、非亲缘关系进程通信
IPC:共享内存、信号灯、消息队列共享内存的特点:共享内存创建后一直存在于内核中,直到被删除或系统关闭;共享内存和管道不一样,读取后,内容仍然存在。shm_get函数: 共享内存的创建头文件: #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h>函数原型: int shmget(key_t key, int size, int shmflg)函数参数: key:I原创 2020-07-08 18:21:02 · 1870 阅读 · 0 评论 -
信号的发送、接收、处理函数
信号的发送函数:kill函数:发送信号给任意进程头文件: #include <signal.h>#include <sys/types.h>函数原型: int kill(pid_t pid, int sig)参数:*pid: 正数,要接收信号的进程号;0,信号被发送到与pid进程相同的进程组中;-1,信号发送给所有的进程表中的进程*sig: 信号返回: 成功0,错误-1例:kill(pid,9);raise函数:只能发送给当前进程,等于kill(getpid(原创 2020-07-08 11:09:38 · 1370 阅读 · 0 评论 -
Android - NDK - CMake - 生成so库
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《Android - NDK - CMake - 生成so库(方式一)》, 一起来围观吧 https://blog.csdn.net/weixin_43707799/article/details/107123520?utm_source=app原创 2020-07-04 15:24:06 · 271 阅读 · 1 评论