- 博客(25)
- 资源 (2)
- 收藏
- 关注
原创 Linux 下条件变量的使用
1, 引入在很多情况下,对于典型的生产者-消费者模型,多线程之间的同步,如直接使用mutex,除了生产者、消费者之间要竞争互斥量以外,消费者之间也需要竞争互斥量,但如果生产者中没有数据,消费者之间竞争互斥锁是无意义的。有了条件变量机制以后,只有生产者完成生产,才会引起消费者之间的竞争。这样可以提高程序效率。2, 定义与mutex锁配合使用实现线程同步的一种变量3,接口pthread_cond_t cond = PTHREAD_COND_INITIALIZER; int p...
2020-09-15 15:41:00
347
原创 字符串常量
C语言中字符串常量到底存在哪了?常量存储总结局部变量、静态局部变量、全局变量、全局静态变量、字符串常量以及动态申请的内存区1、局部变量存储在栈中2、全局变量、静态变量(全局和局部静态变量)存储在静态存储区3、new申请的内存是在堆中4、字符串常量也是存储在静态存储区补充说明:1、栈中的变量内存会随着定义所在区间的结束自动释放;而对于堆,需要手动free,否则它就一直存在,直到程序结束;2、对于静态存储区,其中的变量常量在程序运行期间会一直存在,不会释放,且变量常量在其中只有一份拷贝.
2020-09-10 17:35:39
3501
原创 指针函数和函数指针
1,指针作为C语言中一个基本的数据类型,使C语言变的非常灵活和方便,一些同学对函数指针和指针函数的概念有些傻傻分不清楚,今天我们明确说一下并做一些延伸。2,指针函数是一个函数,它的返回值是一个指针,这个返回指针可以说int类型的,可以是char类型的等等。例如一个典型的指针函数写法如下:int *alloc_mem_int(){ return malloc(sizeof(int));}该例中,我们可以这样理解,由于()的结合优先级高于*,alloc_mem_int先跟()结合,所以它...
2020-09-09 16:13:31
177
原创 架设ftp-http-tftp server服务器
开启ftp服务和Web服务1,打开服务器管理器管理 -> 添加角色和功能在服务器角色中选择"Web服务器(IIS)"安装2,开启ftp服务a,由于ftp密码过于简单,默认密码策略无法添加新ftp用户,删除禁用密码策略win+rgpedit.msc计算机配置 -> Windows设置 -> 安全设置 -> 账户策略 -> 密码策略b,添加ftp用户控制面板 -> 用户帐户 -> 用户帐户 -> 管理帐户添加新用户c, 打开IIS管
2020-09-09 16:12:42
564
原创 一次Hyper-V和Azure平台设备无法启动的问题调试过程
最近一个客户报bug说升级新版本失败,由于版本跨度较大,我们首先怀疑是由于配置不兼容导致的,拿到用户的配置后开始尝试复现,无奈实验室环境无法复现。由于客户环境是hyper-v环境,想着自己老是自己闷头尝试也不是办法,于是请求客户把环境中的vm备份成快照,然后把快照传过来,问题得以复现。happy于是采用最直接的办法,在系统升级流程中加入详细的调试,看看卡在了哪个地方。根据调试信息,系统启动后卡在了硬盘扫描的地方,细化调试信息,发现设备会调用libblkid的API 时卡住了,Google了一下,该库是
2020-09-07 15:14:48
310
原创 xen环境搭建
使用Ultralso工具 参考 https://blog.youkuaiyun.com/Akilarex/article/details/890892721,安装ubuntu 16.04 LTS 桌面版2,系统安装完成后,更新apt源,安装openssh-server,vim 等必要软件3,安装xen-hypervisorsudo apt install xen-hypervisor -y4, 安装完成后重启系统5,重启登录后,通过命令sudo xl list如果能看到Domain-0则说明Xen安装成
2020-09-07 15:04:01
685
原创 记一次内核打印 VFS: Can‘t find ext4 filesystem 错误信息的定位和解决过程
问题:内核打印VFS: Can't find ext4 filesystem只有第一次启动才会出问题定位思路:1,由于刚升级了内核,很有可能是内核导致的查看内核代码,定位到打印出错信息的位置为函数ext4_fill_super,该函数是一个回调函数,由函数mount_bdev 调用加入printk打印详细信息,看为什么会出现这种错误,定位到问题代码在if (sb->s_magic != EXT4_SUPER_MAGIC) { printk(KERN_ERR, "invali...
2020-09-04 13:13:47
7369
原创 hyper-v环境搭建
安装Windows server 2016 已完成。配置Hyper-V服务器。遇到的问题:1,启用Hyper-V服务管理功能,hyper-v manager 不是一个单独的软件,在服务管理器中添加,然后重启系统即可。2,初始时导入一个VM不成功的问题,报错“Invalid VM configuration, no such switch 'vmnet'”,在hyper-v manager中添加一个新的名为vmnet的虚拟交换器即可3,设置远程,Windows 10远程Windows ser
2020-09-04 13:11:26
693
原创 GSLB相关知识点
摘要 GSLB是Global Server Load Balance的缩写,即全局负载均衡。本文首先介绍了什么是负载均衡SLB,以及为什么要使用SLB。接着引出全局负载均衡GSLB的概念和作用。为此介绍了其基于DNS进行解析和分配负载的实现,包括DNS的原理简介、应用部署中的基本概念、分配负载的决策条件等内容。以外,本文还简单介绍了通过HTTP和IP...
2020-05-05 10:35:47
27389
1
转载 C语言中宏的高级应用
关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量 通过替换后在其左右各加上一个双引号。比如下面代码中的宏:#define WARN_IF(EXP) / do{ if (EXP) / fprintf(stderr, "Warning: " #EXP "/...
2018-08-08 14:37:50
258
原创 Unix domain socket 实例
server端:#include <arpa/inet.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <poll.h>#include <sys/types.h>#include <sys/socket.h>#include &
2018-06-07 15:51:38
999
转载 Socket的理解和应用
“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket...
2018-06-07 14:15:19
5241
1
转载 非阻塞socket调用connect, epoll和select检查连接情况示例
我们知道,linux下socket编程有常见的几个系统调用:对于服务器来说, 有socket(), bind(),listen(), accept(),read(),write()对于客户端来说,有socket(),connect()这里主要要讲的是客户端这边的connect函数。对于客户端来说,需要打开一个套接字,然后与对端服务器连接,例如: 1 int main(int argc, char ...
2018-05-30 18:42:21
1092
1
转载 pthread_join 详解
pthread_join在Linux中,新建的线程并不是在原先的进程中,而是系统通过一个系统调用clone()。该系统copy了一个和原先进程完全一样的进程,并在这个进程中执行线程函数。不过这个copy过程和fork不一样。 copy后的进程和原先的进程共享了所有的变量,运行环境。这样,原先进程中的变量变动在copy后的进程中便能体现出来那么pthread_join函数有什么用呢???pthrea...
2018-05-30 10:20:40
6233
转载 linux下的7种文件类型
普通文件(-)我们用 ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r--r-- ,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件。这些文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具... .... 或 cp工具等。这类文件的删除方式是用rm 命令目录(d)当我们在某个目录下执行,看到有类似 drwxr-xr-x ,这样的文件就是目录,目录...
2018-05-30 10:19:30
1904
转载 浅谈时间函数gettimeofday的成本 ——gettimeofday是由底层do_gettimeofday返回的?!
转自 https://blog.youkuaiyun.com/lqxandroid2012/article/details/51487547 我们在程序中会频繁地取当前时间,例如处理一个http请求时,两次调用gettimeofday取差值计算出处理该请求消耗了多少秒。这样的调用无处不在,所以我们有必要详细了解下,gettimeofday这个函数做了些什么?内核1ms一次的时钟中断处理真的可以支持...
2018-04-25 14:33:59
295
转载 字符串匹配的KMP算法
https://kb.cnblogs.com/page/176818/字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Kn...
2018-03-26 15:34:16
123
转载 TCP四次挥手(图解)-为何要四次挥手
当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次挥手”。第一次挥手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;第二次挥...
2018-03-12 10:09:28
326
转载 Linux Kernel 4.9 中的 BBR 算法与之前的 TCP 拥塞控制相比有什么优势?
转自 知乎:https://www.zhihu.com/question/53559433作者:李博杰中国科技大学微软亚洲研究院 博士在读
2018-03-04 00:13:40
746
转载 Linux TCP拥塞控制算法原理解析
TCP拥塞控制名词解释:1.awnd(advised window) 通告窗口,由接收端tcp发送给发送端tcp,告诉发送端自己能用于接收新的数据包的当前可用空间。2.cwnd(congestion window)拥塞窗口,人为引入的变量,用于拥塞控制。因为如果单独使用awnd,每次都按接收端最大窗口发送易引发网络的瞬时拥塞瞬时进入拥塞避免剧烈降低网络利用率。3.ssthresh(slow sta...
2018-03-04 00:12:45
1187
转载 使用Docker运行Nginx
转自:http://www.ruanyifeng.com/blog/2018/02/nginx-docker.html?from=timeline一、HTTP 服务Nginx 的最大作用,就是搭建一个 Web Server。有了容器,只要一行命令,服务器就架设好了,完全不用配置。$ docker container run \ -d \ -p 127.0.0.2:8080:80 \ ...
2018-02-27 13:05:54
1930
转载 Linux程序开发经验总结
转自:http://blog.youkuaiyun.com/lotus302/article/details/187059531. 进程和线程1.1. 进程进程终止有8种方式使进程终止,其中5种为正常终止,3种异常终止方式:1) 从main返回2) 调用exit3) 调用_exit或_Exit4) 最后一个线程从其启动例程返回5) 最后一个线程调用pthread_exit6) 调用abort7...
2018-02-24 16:16:07
1573
转载 Linux 技巧:让进程在后台可靠运行的几种方法
我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题。nohup/setsid/&场景:如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运...
2018-02-24 15:27:31
190
转载 linux yum 命令
yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。yum 语法yum [op...
2018-02-24 14:35:14
184
互斥量、条件变量与pthread_cond_wait()函数的使用
1.Linux“线程” 进程与线程之间是有区别的,不过linux内核只提供了轻量进程的支持,未实现线程模型。Linux是一种“多进程单线程”的操作系统。Linux本身只有进程的概念,而其所谓的“线程”本质上在内核里仍然是进程。 大家知道,进程是资源分配的单位,同一进程中的多个线程共享该进程的资源(如作为共享内存的全局变量)。Linux中所谓的“线程”只是在被创建时clone了父进程...
2018-02-23 15:21:16
290
linux下shell脚本实现的svn备份与还原工具-v2
2020-05-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人