
linux学习
文章平均质量分 82
jlaij
这个作者很懒,什么都没留下…
展开
-
常用linux命令记录
=========================================================================================strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。演示:str原创 2021-02-07 16:38:41 · 248 阅读 · 0 评论 -
基于epoll实现高性能服务器模型
原创 2019-10-31 23:22:46 · 246 阅读 · 0 评论 -
struct utname结构体使用
struct utname 用于获取系统相关信息#include extern int uname (struct utsname *__name)struct utsname { char sysname[_UTSNAME_SYSNAME_LENGTH];//当前操作系统名 char nodename[_UTSNAME_NODENAME_LENGTH];//网络上的名称原创 2015-09-14 11:12:03 · 1326 阅读 · 0 评论 -
跳跃表解析
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。 用跳表吧,跳表是一种随机化的数据结构,目前原创 2015-08-12 09:12:48 · 695 阅读 · 0 评论 -
struct msghdr 和 struct iovec
#includestruct msghdr { void * msg_name ; / * 消息的协议地址 * / 协议地址和套接口信息,在非连接的UDP中,发送者要指定对方地址端口,接受方用于的到数据来源,如果不需要的话可以设置为NULL(在TCP或者连接的UDP中,一般设置为NULL) socklen_t msg_namelen ; / * 地址的长原创 2015-07-31 09:32:13 · 20456 阅读 · 2 评论 -
Redis之小端转大端
redis的Endianconv.c文件主要服务于inset集合升级,其实看以看出它是做了个转换,将小端转成大端的方法#include /* Toggle the 16 bit unsigned integer pointed by *p from little endian to * big endian */void memrev16(void *p) { unsign原创 2015-08-12 16:36:54 · 1538 阅读 · 0 评论 -
值得推荐的C/C++框架和库 (真的很强大)
值得学习的C语言开源项目- 1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/转载 2015-08-13 16:34:19 · 889 阅读 · 0 评论 -
getaddrinfo函数使用
getaddrinfo()函数详解IPv4中使用gethostbyname()函数完成主机名到地址解析,这个函数仅仅支持IPv4,且不允许调用者指定所需地址类型的任何信息,返回的结构只包含了用于存储IPv4地址的空间。IPv6中引入了getaddrinfo()的新API,它是协议无关的,既可用于IPv4也可用于IPv6。getaddrinfo函数能够处理名字到地址以及服务到端口这两种转原创 2015-08-03 09:48:56 · 910 阅读 · 0 评论 -
memcached源码分析之四
还是从Memcached.c文件的main函数开始,逐步分析Memcached的实现 if (!sanitycheck()) { return EX_OSERR; }static bool sanitycheck(void) { /* One of our biggest problems is old and bogus libevents */原创 2015-08-06 11:51:40 · 618 阅读 · 0 评论 -
Redis 的跳跃表实现
Redis 的跳跃表由 redis.h/zskiplistNode 和 redis.h/zskiplist 两个结构定义, 其中 zskiplistNode 结构用于表示跳跃表节点, 而zskiplist 结构则用于保存跳跃表节点的相关信息, 比如节点的数量, 以及指向表头节点和表尾节点的指针, 等等。 header | tail | level \n 5 | length \n转载 2015-08-12 09:23:23 · 489 阅读 · 0 评论 -
Redis之双链表
Redis数据结构大量使用双链表,实现在Adlist.h、Adlist.c文件中双链表结构定义:链表节点typedef struct listNode { struct listNode *prev; struct listNode *next; void *value;} listNode;链表typedef struct list { l原创 2015-08-12 11:22:08 · 533 阅读 · 0 评论 -
memcached的最佳实践方案
基本问题1、memcached的基本设置 1)启动Memcache的服务器端 # /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid-d选项是启动一个守护进程, -m是分配给Memcache使用的内存数量,单位是MB,我这里是10转载 2015-07-31 09:41:20 · 411 阅读 · 0 评论 -
Redis安装及使用介绍
1、下载安装redis官网下载redis-3.0.3.tar.gztar -xvzf redis-3.0.3.tar.gzcd redis-3.0.3make && make install测试执行;打开服务端:/usr/local/bin/redis-server (使用6379端口号)打开客户端:/usr/local/bin/redis-cliset nam原创 2015-08-11 10:00:29 · 498 阅读 · 0 评论 -
7种查找算法解析
查找成功时的平均查找长度为:(假设每个数据元素的概率相等) ASL = 1/n(1+2+3+…+n) = (n+1)/2 ;当查找不成功时,需要n+1次比较,时间复杂度为O(n);所以, 顺序查找的时间复杂度为O(n ) 。C++实现源码://顺序查找int SequenceSearch(int a[], int value, int n){ int i转载 2015-08-11 15:03:45 · 46356 阅读 · 1 评论 -
通过mmap函数快速实现文件复制
编程实例:#include #include #include #include #include #include #include #include #include #include #include using namespace std;int main(int argc, char *argv[]){ void *ptr, *ptr2; int f原创 2015-08-07 16:12:46 · 1311 阅读 · 0 评论 -
共享内存实例
POSIX 为创建、映射、同步和取消共享内存段提供五个入口点:shm_open:创建共享内存段或连接到现有的已命名内存段。这个系统调用返回一个文件描述符。shm_unlink():根据(shm_open() 返回的)文件描述符,删除共享内存段。实际上,这个内存段直到访问它的所有进程都退出时才会删除,这与在 UNIX 中删除文件很相似。但是,调用 shm_unlink() (通常由原来创建共原创 2015-08-07 15:01:00 · 701 阅读 · 0 评论 -
nginx简单实现负载均衡
本机ip:192.168.88.134设置两个虚拟ip:/sbin/ifconfig eth0:1 192.168.88.135 broadcast 192.168.88.255 netmask 255.255.255.0 up/sbin/route add -host 192.168.88.135 dev eth0:1/sbin/ifconfig eth0:2 192.168.8原创 2015-07-08 11:00:23 · 6780 阅读 · 0 评论 -
nginx解析php文件及问题
nginx在解析php会出现no put file specified ,也就是找不到php文件解决方法:1、/etc/php5/cgi/php.ini /etc/php5/fpm/php.ini修改php.ini文件中cgi.fix_pathinfo=12、修改nginx.conf 文件 location ~ \.php$ { root原创 2015-07-07 13:56:03 · 5506 阅读 · 0 评论 -
zeroMQ学习
1 ZeroMQ概述ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。2 系统架构 总体架构ZeroMQ几乎所有的I/O操作都是异步的,主线程不会被原创 2015-07-14 09:35:15 · 934 阅读 · 0 评论 -
c++连接mysql编程(mysq-connector/c++)
本文使用为linux下载c++链接mysql的头文件及动态库:http://mirrors.sohu.com/mysql/Connector-C%2b%2b/mysql-connector-c++-1.1.6-linux-glibc2.5-x86-32解压缩到某个文件下,解压目录如下:.├── include│ ├── cppconn│ │ ├── bui原创 2015-08-17 16:24:45 · 7106 阅读 · 4 评论 -
封装connect/c++连接mysql
参考前一篇文章参考网址:http://dev.mysql.com/tech-resources/articles/mysql-connector-cpp.html#trx头文件:#include #include #include "mysql_connection.h"#include "mysql_driver.h"#include "mysql_error.h"原创 2015-08-18 16:50:39 · 2720 阅读 · 0 评论 -
尾队列测试
queue和list的结构定义和操作都在'sys/queue.h'中完成, 主要定义了下面四种数据结构:单向列表(single-linked lists)单向尾队列(single-linked tail queue)列表(lists)尾队列(tail queues)尾队列图示 尾队列常用宏宏名称操作原创 2015-03-06 11:53:15 · 1045 阅读 · 0 评论 -
使用libev写服务器
libev官网:http://software.schmorp.de/pkg/libev.htmlserver:#include #include #include #include #include #include #include #include "./libev/ev++.h"#include "./libev/ev.h"#include #include原创 2016-09-25 23:27:38 · 3715 阅读 · 1 评论 -
64位redhat编译执行32位c++程序(redhat安装centos源)
cat /etc/issue 查看系统版本我测试的是redhat6.7版本编译32位程序需要一个32位c++库:libstdc++首先将redhat更换成centos的安装源,便于使用yum在线安装程序1、删除redhat原有的yum源# rpm -aq | grep yum|xargs rpm -e --nodeps2、下载新的yum安装包 这原创 2016-01-05 11:16:10 · 2600 阅读 · 0 评论 -
Ubuntu14配置laravel5开发环境
本人使用Ubuntu14.04作为开发环境,主要由于laravel5要求配置环境比较新。1、配置lamp环境第一步 安装Apache2sudo apt-get install apache2第二步 安装PHP模块sudo apt-get install php5第三步 安装Mysqlsudo apt-get install mysql-s原创 2015-09-17 11:08:43 · 3319 阅读 · 0 评论 -
在64位linux下编译32位程序
一般情况下我们最好是在一个平台上编译本平台的二进制程序,比如在32位平台上编译32位程序而在64位平台上编译64位程序。 现在64位的系统(这里主要指x86_64系统,包括AMD64和Intel的EM64T)已经开始广泛的使用起来了,甚至于你现在要是想买32位的处理器根本就没有。64位的系统在性能和处理能力上相对32位系统也都有很大的提高。所以现在很多用户已经选择使用64位的系统了转载 2016-01-04 13:57:06 · 7797 阅读 · 0 评论 -
leader/follower多线程模型
上图就是L/F多线程模型的状态变迁图,共6个关键点:(1)线程有3种状态:领导leading,处理processing,追随following;(2)假设共N个线程,其中只有1个leading线程(等待任务),x个processing线程(处理),余下有N-1-x个following线程(空闲);(3)有一把锁,谁抢到就是leading;(4)事件/任务来到时,le转载 2015-11-30 16:45:52 · 1106 阅读 · 0 评论 -
c++对ip和端口的处理
编程实例:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class CNetUti原创 2015-11-27 10:08:41 · 4060 阅读 · 0 评论 -
c++读取配置文件2
不同前一篇的实现方式,采用map一次读入内存的方式,效率比前一篇较高CConfig.h#include #include #include #include #include #include #include #ifdef MAP#include using std::map;typedef std::map STR_STR_MAP;typedef std::m原创 2015-11-26 11:21:08 · 612 阅读 · 0 评论 -
c++实现加锁解锁
c++编程实现:/* * Filename: Mutex.h * * Version: * Author: haha * Created at: Tue Oct 13 09:14:19 2015 * * Description: * */#include #incl原创 2015-10-13 10:34:05 · 5198 阅读 · 0 评论 -
c++实现写日志功能
编程实例:#include "Mutex.h"#include "CTime.h"#include #include #include #include #define LOGPATH "./common.log"#define BUFSIZE 2048class CLog{public: static CLog* getInstance(); void Init(c原创 2015-11-23 16:38:37 · 1344 阅读 · 0 评论 -
c++实现封装socket
编程实例:CSocket.h#include #include#include#include#include #include #include #include #include #include #include #include #include class CServSocket{public: CServSocket(); vir原创 2015-11-23 15:54:17 · 9071 阅读 · 0 评论 -
c++ 封装socket和epoll编程
编程实例:CSocket.h文件请参考前一篇文章CSocketEvent.h#include #include #include #include "CSocket.h"const int MaxEvents = 256;const int EpollSize = 500;class CSocketEvent{public: CSocketEvent()原创 2015-11-24 16:27:08 · 2969 阅读 · 0 评论 -
libevent多线程服务器2
代码:#include "lib_net.h"#include "lib_thread.h"#include "lib_public.h"#include #include#include#define BACKLOG 10#define MAX_EVENTS 500#define THRD_NUM 5char ip[24];short port;struct s原创 2015-03-05 16:43:17 · 1094 阅读 · 0 评论 -
c++简单实现多线程并测试volatile的作用
class CPthread{public: static int CreatePthread(void* func, void* arg);};int CPthread::CreatePthread(void* func, void* arg){ pthread_t pid; pthread_attr_t attr; if(pthread_attr_init(&原创 2015-07-02 09:10:35 · 529 阅读 · 0 评论 -
同步IO: sync、fsync与fdatasync
1. write不够,需要fsync一般情况下,对硬盘(或者其他持久存储设备)文件的write操作,更新的只是内存中的页缓存(page cache),而脏页面不会立即更新到硬盘中,而是由操作系统统一调度,如由专门的flusher内核线程在满足一定条件时(如一定时间间隔、内存中的脏页达到一定比例)内将脏页面同步到硬盘上(放入设备的IO请求队列)。因为write调用不会等到硬盘IO完原创 2015-10-09 10:41:20 · 533 阅读 · 0 评论 -
Redis字符串的巧妙处理
sds在Redis中是实现字符串对象的工具,并且完全取代char*.char*的功能比较单一,不能实现Redis对字符串高效处理的需求,char*的性能瓶颈主要在:计算字符串长度需要使用strlen函数,该函数的时间复杂度是O(N),而在Redis中计算字符串长度的操作十分频繁,O(N)的时间复杂度完全不能接受,sds实现能在O(1)时间内得到字符串的长度值;同时,在处理字符串追加appe原创 2015-08-11 17:56:19 · 2128 阅读 · 0 评论 -
nginx配置反向代理服务
#user nobody;worker_processes 4;error_log logs/error.log;error_log logs/error.log notice;error_log logs/error.log info;pid logs/nginx.pid;events { worker_connections 1024;原创 2015-07-06 21:34:18 · 453 阅读 · 0 评论 -
nginx服务器下编写cgi程序
配置nginx,并简单实现cgi程序编程原创 2015-07-06 10:37:33 · 1073 阅读 · 0 评论 -
常用正则表达(二)
1. 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: 2. "^\d+$" //非负整数(正整数 + 0) 3. "^[0-9]*[1-9][0-9]*$" //正整数 4. "^((-\d+)|(0+))$" //非正整数(负整数 + 0) 5. "^-[0-9]*[1-9][0-9]*$" //负整数 6.转载 2013-04-17 21:16:43 · 809 阅读 · 0 评论