10 2018 档案

摘要:多线程 绕过mutex的保护 mutex,能够解决线程安全的问题,但它不是万能的。下面的例子虽然使用了mutex,但是恶意注入了一个外部函数,导致把被mutex保护的双向链表,让一个外部的指针指向了,结果就可以通过这个外部的指针操作被保护的双向链表,也就绕过了metex的保护。 例子: c++ in 阅读全文
posted @ 2018-10-31 07:48 小石王 阅读(907) 评论(0) 推荐(0) 编辑
摘要:多线程 mutex的理解 mutex,我的理解是每个mutex对象都是一个带锁头的门,这个门有两个状态,门开着和门关着,感觉像是废话。。。 当想查看门的里东西,或者把东西放进门里,或者从门里拿出东西前,都需要看看,门是否是打开的。 如果门是打开的,就要进去后赶紧把门关上。关上后,就可以查看屋子里的东 阅读全文
posted @ 2018-10-30 22:57 小石王 阅读(4908) 评论(3) 推荐(0) 编辑
摘要:多线程 参数传递 1,值传递,拷贝一份新的给新的线程。线程1中有个int变量a,在线程1中启动线程2,参数是a的值,这时就会拷贝a,线程1和线程2不共享a。 2,引用传递,不拷贝一份新的给新的线程。线程1中有个int变量a,在线程1中启动线程2,参数是a的引用,这时就不会拷贝a,线程1和线程2共享a 阅读全文
posted @ 2018-10-28 20:53 小石王 阅读(10521) 评论(0) 推荐(0) 编辑
摘要:多线程 detach的困惑 求大神解答: 1,当在一个函数里启动一个线程后,并detach了 2,detach的线程里使用了这个函数里new出来的一个对象 3,detach后,delete了这个对象 4,为什么detach在线程里,使用了在3处delete的内存还不报错误??? start 更新分割 阅读全文
posted @ 2018-10-24 23:53 小石王 阅读(3128) 评论(0) 推荐(0) 编辑
摘要:linux epoll系列5 解除epoll_wait状态 有时候会有解除epoll_wait状态的需求。 实现方法: 1,给执行epoll_wait的程序发signal。 2,使用sockpair。 1,给执行epoll_wait的程序发signal。 c++ include include in 阅读全文
posted @ 2018-10-21 23:14 小石王 阅读(3007) 评论(0) 推荐(0) 编辑
摘要:llinux epoll系列4 利用epoll_wait实现非阻塞的connect connect函数是阻塞的,而且不能设置connect函数的timeout时间,所以一旦阻塞太长时间,影响用户的体验,所以就出来一个需求,硬要设置connect的timeout时间。 实现方法:先把connect函数 阅读全文
posted @ 2018-10-21 22:11 小石王 阅读(2356) 评论(0) 推荐(0) 编辑
摘要:linux epoll系列3 利用epoll_wait设置timeout时间长度 epoll_wait函数的第四个参数可以设置,epoll_wait函数的等待时间(timeout时间长度)。 例子1,是接收端。 例子2,是发送端。 例子1,接收端 "github源代码" 运行方法:先运行接收端,再运 阅读全文
posted @ 2018-10-21 20:50 小石王 阅读(8370) 评论(0) 推荐(1) 编辑
摘要:linux epoll系列2 利用epoll_wait查看是否可以送信 write函数本来是非阻塞函数,但是当缓存区被写满后,再往缓存区里写的时候,就必须等待缓存区再次变成可写,所以这是write就变成了阻塞了,这个进程或者线程就堵住了,不能被响应了。 epoll_wait函数可以判断出,缓存区是否 阅读全文
posted @ 2018-10-21 13:48 小石王 阅读(661) 评论(0) 推荐(0) 编辑
摘要:linux epoll系列1 创建epoll 据说select和poll的弱点是,随着连接(socket)的增加,性能会直线下降。 epoll不会随着连接(socket)的增加,性能直线下降。 知识点: 1,epoll_wait函数是阻塞的,直到有socket发生变化。 2,epoll使用流程,先创 阅读全文
posted @ 2018-10-21 11:29 小石王 阅读(1576) 评论(0) 推荐(0) 编辑
摘要:linux 进程间通信系列7,使用pthread mutex c++ include include include include include include int main(){ pthread_mutex_t m; pthread_mutexattr_t mat; int shmid; 阅读全文
posted @ 2018-10-20 22:45 小石王 阅读(760) 评论(0) 推荐(1) 编辑
摘要:linux 进程间通信系列6,使用消息队列(message queue) 概念:消息排队,先进先出(FIFO),消息一旦出队,就从队列里消失了。 1,创建消息队列(message queue) 2,写消息到消息队列(message queue) 3,从消息队列(message queue)读消息 3 阅读全文
posted @ 2018-10-20 21:50 小石王 阅读(4017) 评论(0) 推荐(0) 编辑
摘要:linux 进程间通信系列5,使用信号量 信号量的工作原理: 由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们的行为是这样的: P(sv):如果sv的值大于零,就给它减1;如果它的值为零,就挂起该进程的执行 V(sv):如果有其他进程因等待sv而被挂起,就让它恢复运行,如果没 阅读全文
posted @ 2018-10-20 16:45 小石王 阅读(3486) 评论(0) 推荐(0) 编辑
摘要:在ubuntu18.04上安装EOS的目的: "在ubuntu中,进行eos源码编译和安装" 在不联网的安全环境下,用eos官方的命令行工具,创建自己的公钥和私钥 用eos官方的命令行工具,创建钱包,执行转账 一,用eos官方的命令行工具cleos,创建两对的公钥和私钥 注意:做下面的操作时,请拔掉 阅读全文
posted @ 2018-10-20 16:24 小石王 阅读(2616) 评论(0) 推荐(0) 编辑
摘要:linux 进程间通信系列4,使用共享内存 1,创建共享内存,用到的函数shmget, shmat, shmdt | 函数名 | 功能描述 | | | | | shmget | 创建共享内存,返回pic key | | shmat | 第一次创建完共享内存时,它还不能被任何进程访问,shmat()函 阅读全文
posted @ 2018-10-20 14:07 小石王 阅读(5480) 评论(3) 推荐(3) 编辑
摘要:linux 进程间通信系列3,使用socketpair,pipe 1,使用socketpair,实现进程间通信,是双向的。 2,使用pipe,实现进程间通信 使用pipe关键点:fd[0]只能用于接收,fd[1]只能用于发送,是单向的。 3,使用pipe,用标准输入往里写。 疑问:在代码2里不写wa 阅读全文
posted @ 2018-10-20 09:50 小石王 阅读(1387) 评论(0) 推荐(0) 编辑
摘要:linux 进程间通信系列2,使用UNIX_SOCKET 1,使用stream,实现进程间通信 2,使用DGRAM,实现进程间通信 关键点:使用一个临时的文件,进行信息的互传。 使用stream,server端: c++ include include include include include 阅读全文
posted @ 2018-10-19 08:35 小石王 阅读(1951) 评论(0) 推荐(0) 编辑
摘要:linux 进程间通信系列1,使用signal,kill 信号基本概念: 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件 阅读全文
posted @ 2018-10-18 23:01 小石王 阅读(2154) 评论(0) 推荐(0) 编辑
摘要:linux 进程 fork wait函数 fork:创建子进程 wait:父进程等待子进程结束,并销毁子进程,如果父进程不调用wait函数,子进程就会一直留在linux内核中,变成了僵尸进程。 fork函数的详细说明: "fork" wait函数详细说明参考: "wait" 例子1:不注释掉exit 阅读全文
posted @ 2018-10-18 07:02 小石王 阅读(3629) 评论(0) 推荐(0) 编辑
摘要:网络编程 UDP 设定MTU MTU(Maximun Transmisson Unit):一次送信的最大size。 在程序里动态改变MTU。注意:程序运行需要root权限。 程序运行的方法: 1,取得MTU "github源代码" 2,改变MTU "github源代码" 在命令行里也可以查看和改MT 阅读全文
posted @ 2018-10-16 08:23 小石王 阅读(1312) 评论(0) 推荐(0) 编辑
摘要:网络编程 UDP up/down 网卡 在程序里动态改变网卡的状态。注意:程序运行需要root权限。 程序运行的方法: 1,关闭网卡 "github源代码" 2,打开网卡 "github源代码" 在命令行里也可以down和up网卡(需要root权限) down网卡: up网卡: c/c++ 学习互助 阅读全文
posted @ 2018-10-16 07:39 小石王 阅读(993) 评论(0) 推荐(0) 编辑
摘要:网络编程 UDP 改变网关和网卡名字 在程序里动态改变网关和网卡名字 1,改变网卡名字 "github源代码" 2,改变网关 "github源代码" c/c++ 学习互助QQ群:877684253 本人微信:xiaoshitou5854 阅读全文
posted @ 2018-10-16 07:19 小石王 阅读(808) 评论(0) 推荐(0) 编辑
摘要:网络编程 UDP 改变网卡的硬件地址 在程序里动态改变网卡的硬件地址 1,取得网卡的硬件地址 "github源代码" 2,改变网卡的硬件地址 "github源代码" c/c++ 学习互助QQ群:877684253 本人微信:xiaoshitou5854 阅读全文
posted @ 2018-10-16 06:58 小石王 阅读(839) 评论(0) 推荐(0) 编辑
摘要:网络编程 UDP 改变IP地址 在程序里动态改变主机的IP地址 1,改变ipv4的地址 "github源代码" 2,改变ipv6的地址 c++ include include include include include include include include include struct 阅读全文
posted @ 2018-10-15 22:51 小石王 阅读(1795) 评论(0) 推荐(0) 编辑
摘要:网络编程 UDP 用if_nameindex和ioctl取得主机网络信息 getifaddrs函数取得的东西太多了,如果只想取得网卡名字和网卡编号可以用下面的2个函数。 1,if_nameindex 取得网卡名字和网卡编号 "github源代码" 2,ioctl 取得网卡的名字。 注意点:ioctl 阅读全文
posted @ 2018-10-15 08:21 小石王 阅读(844) 评论(0) 推荐(0) 编辑
摘要:网络编程 UDP 主机网络信息取得 1,if_nametoindex 通过网卡名字取得网卡编号 2,if_indextoname 通过网卡编号取得网卡名字 "github源代码" 3,getifaddrs 取得网卡的名字,取得网卡的flags,取得IP地址,取得netmask "github源代码" 阅读全文
posted @ 2018-10-15 07:37 小石王 阅读(716) 评论(0) 推荐(0) 编辑
摘要:网络编程 使用getaddrinfo的单纯UDP 1,UDP发送端 2,UDP接收端 UDP发送端: c++ include include include include include include include include //getaddrinfo int main(int argc 阅读全文
posted @ 2018-10-12 07:53 小石王 阅读(1128) 评论(0) 推荐(0) 编辑
摘要:网络编程 单纯UDP通信 1,UDP发送端 2,UDP接收端 UDP发送端: "github源代码" 发送端的执行方式: UDP接收端 "github源代码" c/c++ 学习互助QQ群:877684253 本人微信:xiaoshitou5854 阅读全文
posted @ 2018-10-12 06:53 小石王 阅读(313) 评论(0) 推荐(0) 编辑
摘要:网络编程 UDP 发送端 bind 作用 upd 发送端 调用bind函数的效果:把socket特定到一个指定的端口,如果不调用bind,内核会随机分配一个端口。 upd 发送端 调用bind函数的目的:假如有2个发送端,接收端需要识别是从哪个发送端过来的,就可以分别在发送端调用bind函数,这样一 阅读全文
posted @ 2018-10-11 23:35 小石王 阅读(3919) 评论(0) 推荐(0) 编辑
摘要:网络编程 单纯http客户端,服务器端 1,http客户端 2,http服务器端 http客户端: "github源代码" 发送端的执行方式: http服务器端 "github源代码" 测试方式: c/c++ 学习互助QQ群:877684253 本人微信:xiaoshitou5854 阅读全文
posted @ 2018-10-11 20:47 小石王 阅读(3127) 评论(0) 推荐(0) 编辑
摘要:直接gdb pgname 参数1 这种方式,参数1是不会带到gdb里的 1,首先启动程序 2,设置程序的参数 阅读全文
posted @ 2018-10-11 08:22 小石王 阅读(1510) 评论(0) 推荐(2) 编辑
摘要:网络编程 文件传输 1,文件发送端 2,文件接收端 文件发送端: "github源代码" 接收端的执行方式: c/c++ 学习互助QQ群:877684253 本人微信:xiaoshitou5854 阅读全文
posted @ 2018-10-10 08:05 小石王 阅读(2639) 评论(0) 推荐(0) 编辑
摘要:网络编程 getaddrinfo 函数 解析网址,返回IP地址。 例子: "github源代码" c/c++ 学习互助QQ群:877684253 本人微信:xiaoshitou5854 阅读全文
posted @ 2018-10-09 23:25 小石王 阅读(4646) 评论(0) 推荐(0) 编辑
摘要:网络编程 bind函数 bind的作用是确定端口号。 正常处理都是先bind,然后listen 如果不bind,直接listen,会是什么结果? 内核会自动随机分配一个端口号 例子: c++ include include include include include include void p 阅读全文
posted @ 2018-10-09 08:25 小石王 阅读(1903) 评论(0) 推荐(0) 编辑
摘要:socket API 调用后的错误判断 perror errno 调用完socket API后,需要判断调用是否成功与失败。如果失败,会自动设置errno(是个整数), 并且用perror可以打印出具体的错误信息。 注意点: 1,如果有多个socket API调用失败,errno存放的是最后一个失败 阅读全文
posted @ 2018-10-08 22:24 小石王 阅读(1235) 评论(0) 推荐(0) 编辑
摘要:基本线程管理 join detach join:主线程等待被join线程结束后,主线程才结束。 detach:主线程不等待被detach线程。 问题1:子线程什么时点开始执行? std::thread t(fun);执行后,就开始执行了。 问题2:在哪里调用join或者detach 1,使用deta 阅读全文
posted @ 2018-10-07 23:11 小石王 阅读(3252) 评论(0) 推荐(0) 编辑
摘要:socket 函数 system Call socket 函数原型: 参数adressfamily 举例 | adress family种类 | 功能描述 | | | | | AF_INET | IPV4用socket | | AF_INET6 | IPV6用socket | | AF_UNIX | 阅读全文
posted @ 2018-10-06 15:31 小石王 阅读(726) 评论(0) 推荐(0) 编辑
摘要:emacs 配置.emacs (setq url-proxy-services '(("http" . "10.4.47.114:8080") ("https" . "10.4.47.114:8080") )) (setq package-archives '(("gnu" . "http://mi 阅读全文
posted @ 2018-10-06 11:51 小石王 阅读(575) 评论(0) 推荐(0) 编辑
摘要:网络编程与多线程 编译参数 编译时要链接操作系统的pthread库 不加 pthread的话,出现下面的错误: 例子: "github源代码" c/c++ 学习互助QQ群:877684253 本人微信:xiaoshitou5854 阅读全文
posted @ 2018-10-04 08:28 小石王 阅读(875) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示