![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
weilin.jiang
Windows内核砖家
展开
-
GUN C/C++ __attribute__ 用法
GNUC的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(FunctionAttribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute转载 2015-11-19 20:10:43 · 6009 阅读 · 0 评论 -
【进程池封装】实现简单回射服务器
图.1 进程池框架图半同步/半异步模式进程池类定义class Process{public: Process() : m_pid(-1) {}public: pid_t m_pid; int m_pipefd[2];};templateclass ProcessPool{private: ProcessPool(int listenfd, int原创 2016-04-16 13:37:57 · 708 阅读 · 0 评论 -
【线程池封装】实现简单回射服务器
图.1 线程池框架半同步/半反应堆模式(半同步/半异步模式的变体)类封装:templateclass ThreadPool{public: ThreadPool(int threadnum = 8, int maxreqnum = 1000); ~ThreadPool() { delete [] m_Pthread; m_Stop = true; } /* 往原创 2016-04-16 14:28:58 · 611 阅读 · 0 评论 -
【服务器编程】初步确定服务器逻辑设计
【前言】本项目主要提供资源区、聊天、讨论区等服务。服务是具体的事情,而调度则是控制服务进行的主干线,所以多进程池/线程池的设计很重要。下面是服务器采用的进程/线程逻辑结构,而具体什么服务再封装起来使其被线程调用。图.1 初步服务器逻辑设计【编程逻辑】一般服务器由三部分组成:I/O,处理单元,数据存储。I/O模型:一般采用非阻塞模型(epoll的ET模式效原创 2016-04-17 20:05:38 · 953 阅读 · 0 评论 -
【服务器编程】为我的服务器买铲子
【上回战况】上回做到Xserver超级服务就完了;控制逻辑、控制和具体服务的桥梁已经基本实现,当然还有很多细节需要处理的。不知道的同志可以翻上去看看哦。下面,我要为我的服务器添加具体服务,那要怎么做?【最新战况】因为不同的服务有一个共同点,那就是都是一个通信(好像说了废话嘿)。根据这种想法,我想到了抽象工厂模式,绝对是不能在XServer超级服务类硬编码的哦,虽然我资历浅,但我知道那个原创 2016-04-19 02:43:26 · 657 阅读 · 0 评论 -
【服务器编程】服务器编程实现逻辑和超级服务
【前言】 由上一篇文章,我决定了服务器的控制逻辑,即多进程/多线程的服务器(Apache也是这个模型哦)。它掌控整个服务逻辑流程,但是具体服务是没有提供的,这就要我们自己再封装一些特定服务的类,然后在线程里调用。 因为服务器相应的请求种类是很多的,包括登陆请求、下载文件请求、刷新请求等等,那么就要我们自己封装一些数据结构来判断客户请求类型。另一方面,在我看来,虽然原创 2016-04-19 02:13:26 · 814 阅读 · 0 评论 -
【服务器编程】基础概念与功能划分
前言一个服务器框架可划分为三个部分,分别是 I/O模型、事件处理模式、并发模式。图.1I/O处理单元:处理客户连接,读写网络数据(机群情况:可实现负载均衡)逻辑处理单元:业务进程/线程(机群情况:逻辑服务器)网络存储单元:本地数据库、文件或者缓存(机群情况:数据库服务器)当然,划分并不是一成不变的;如有时I/O处理单元的 读写网络数据 可能由逻辑处理单元承担,那原创 2016-04-16 13:20:12 · 673 阅读 · 0 评论 -
【服务器编程】MYSQL数据库连接池封装
【前言】现代服务器后台数据基本上都用数据库管理,因为他有一套完整的数据保存方案,本连接池是根据MYSQL提供的纯C API封装。【上回战况】目前,服务器添加了文件服务器类,只是简单的文件传输;但是没有使用数据库保存文件的信息,随着数据的增加,文件的管理肯定就很难。【目前战况】为了同意所有线程访问数据库的方式,封装一个连接池,如下:class MYSQLConnPoo原创 2016-04-23 16:39:23 · 982 阅读 · 0 评论 -
【服务器编程】EPOLL的LT和ET模式的区别和理解
【前言】epoll模型是服务器编程的高性能框架,比select 和 poll模型高效很多,当然还有其它的模型,如kqueue等,具体linux发行版提供不同的模型,一般都支持epoll吧。【理解】epoll提供两种工作模式:LT 和 ET。LT模式是epoll默认的工作方式,相当于一个效率很高的poll模型;而ET是高效的工作方式。LT 和 ET本质的区别是:原创 2016-07-07 23:05:04 · 20306 阅读 · 6 评论 -
Ubuntu15.10使用mysql 5.6.28中文乱码问题解决
修改两个文件:①/etc/mysql/conf.d/mysql.cnf在[mysql]后添加:[mysql]default-character-set = utf8②/etc/mysql/mysql.conf.d/mysqld.cnf在相应位置添加: [client] // 默认没有,添加default-character-set=utf8 [my原创 2016-04-07 21:00:13 · 600 阅读 · 0 评论 -
linux文件传输之SFTP和SCP
SFTP和SCP都是通过ssh(port22)通道来传输数据,所以传输的数据是加密过的。另外,对端必须已经启动了sshd。SFTP#sftp users@host...users@host's password:sftp>可以执行的命令:针对远程,ls\dir\mkdir\rmdir\pwd\chgrp\chown\chmod\ln\rm\rename\exit原创 2016-03-29 16:52:02 · 881 阅读 · 0 评论 -
【服务器编程】多线程安全数据库连接池
某风平浪静的晚上,我和多线程搅上劲,如何在多线程环境安全创建连接池、释放、使用,想了很久,写了很久,写出了如下代码,感觉也很多bug吧。发表此文,谨表示我今晚不知道为什么如此 较真,很想做到完美,可是能力还是不到那个高度,写不出很完美的代码。如果有想法的同志路过,留点提示给我,谢谢谢谢。/* 析构不知道怎么在多线程保证安全,程序员责任,我的脑袋要炸了 *//* 销毁由一个线程完成原创 2016-07-05 23:56:10 · 2725 阅读 · 0 评论 -
【UNIX环境高级编程】信号安全——可重入函数
可重入函数(用于信号处理函数、 且 安全时的叫法),即是在信号处理函数中可以调用的函数,他们是安全的,不安全的如malloc(试想:线程正在调用malloc进行分配,而信号来了,在处理函数里面有调用malloc,那么就很有可能对进程造成破坏,破坏储存区维护的链表)、getpwnam等可重入函数在处理操作期间,会阻塞任何会引起不一致的信号发送。试想下面一个情况:因原创 2016-07-06 15:57:04 · 1108 阅读 · 0 评论 -
MinGW 和 MSYS 的手动安装与环境配置
【2010-11-18 注】目前MinGW已经提供了自动安装包。尽管如此,这篇文章的内容依然有效。如果需要查看关于MinGW和MSYS自动安装的内容,请移步:http://www.swingworks.net/2010/11/install_mingw_and_msys_with_mingw-get-inst/ 原文:http://www.swingworks.net/2010/0转载 2016-09-20 11:14:18 · 19043 阅读 · 1 评论 -
UNIX域套接字轮询XSI消息队列
/*轮询实现。因为消息队列和文件描述符没有关联,利用unix域套接字的作为中间层。*/#include #include #include #include #include #include #include #include const int NQ = 3;const int MAXSZ = 512;const int KEY = 0x1230;/原创 2016-03-15 17:14:52 · 760 阅读 · 0 评论 -
通过ssh通道加密通信数据
ssh数据加密是非常棒的,先来个如何进行加密的示意图。图.1开启ssh服务(ubuntu):#/etc/init.d/ssh start查看ssh 服务状态:图.2执行:#ssh -L 6000:127.0.0.1:8888 -N 127.0.0.1 // 注意,这里第一个ip是回环地址,第二个应该是远程的地址,这里用于测试。6原创 2016-03-24 18:44:31 · 3999 阅读 · 0 评论 -
Linux C创建守护进程(daemon)及终端相关概念
引言 所谓守护进程(daemon),是不具备控制终端的,常常是在系统引导装入时启动,仅在系统关闭时才终止,输出的报告信息一般在日志文件。 守护进程没有控制终端通常源于它们由系统初始化脚本(centos下如用chkconfig命令设置开机启动);然后守护进程也可以从某个终端由用户在shell提示符下键入命令启动,这种情况下,守护进程必须亲自脱离与控制终端的关联。原创 2016-04-06 12:13:30 · 1983 阅读 · 0 评论 -
关于C/C++获取指针大小判断系统位数的猜想
不讨论使用sizeof第一个程序,指针类型会根据系统位数的大小而分配。#include int main(int argc, char *argv[]){ int *p = (int *)~0; int count = 0; for (;p!=0;) { p = (int *)((long)p << 1); count++; } printf("%d\原创 2016-03-16 10:28:54 · 2580 阅读 · 0 评论 -
linux下的hosts.allow和hosts.deny
两个文件可以用来控制远程访问的权限。hosts.allow对应允许远程连接的用户,hosts.deny对应拒绝远程访问的用户。以ssh为例:编辑hosts.deny.# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.# See the ma原创 2016-03-29 14:43:32 · 5361 阅读 · 0 评论 -
linux运维路线
第一阶段(以搭建维护底层网络基础平台为驱动)实训主题实训内容实训目标 计算机硬件组成;虚拟机环境部署;安装维护Windows 7;Ghost系统备份与还原掌握计算机硬件组成;掌握使用VMWare部署实验环境,VMWare基本管理;掌握Windows 7操作系统的安装部署;掌握Ghost原创 2016-03-05 19:30:08 · 1247 阅读 · 0 评论 -
ubuntu搭建dhcp服务器
通过DHCP可以自动为客户主机ip,可分配动态ip和静态ip(固定ip)。图.11.搜索DHCP服务器(broadcast形式),window下的“自动获取ip”就是使用了dhcp。2.DHCP提供参数。如返回可供选择的ip,此ip可能是随机的,可能是本主机要求的固定ip。3.DHCP参数选择。如选定ip等。4.DHCP服务确认。DHCP服务器关系到原创 2016-03-29 15:32:40 · 1795 阅读 · 0 评论 -
Linux具体权限规划之ACL(Access Control List)
ACL机制涉及两条命令:setfacl 、getfaclACL来源owner,group,othre搭配的三种权限rwx中,没办法针对单一用户或者某个组。ACL可以针对单一用户、单一文件或者目录进行rwx权限设置。用mount命令查看根目录挂载的分区好,再用dumpe2fs命令查看该分区的superblock内容确定是否支持acl,一般都支持的了。j原创 2016-03-30 18:56:35 · 1492 阅读 · 0 评论 -
Ubuntu搭建NFS文件服务器
前言NFS(Network file system)服务器实现了局域网不同主机、不同操作系统的文件共享。注意,客户端和服务端必须具备相同的账号才能够访问目录或者文件。图.1 NFS服务器共享目录与client示意图基本上NFS端口是2049,但它还有其它的程序启动额外端口,功能非常多,所以使用了RPC(Remote Procedure Call)来管理。原创 2016-03-31 18:17:37 · 1608 阅读 · 0 评论 -
Linux例行性工作(at/cron)
一.只执行一次的任务调度atat针对在规定时间按只执行一次的例行工作。类似/etc/host.allow,at也有/etc/at.deny和at.allow,作用和host相同,一般只用at.deny即可。(可不可以添加任务调度)用法at [-mldv] TIMEat -c 工作号码-m 即使没有任何输出信息,完成任务后也要发送mail通知用户-l at -l 相当于atq,原创 2016-04-01 21:56:26 · 904 阅读 · 0 评论 -
Ubuntu搭建DNS服务器
前言其实在我们没有安装DNS服务之前,可以将/etc/hosts文件比作一个DNS服务配置文件,因为它实现和DNS类似。之所以会独立出DNS服务,是因为因特网主机多,如果每个主机都靠/etc/hosts文件来维护主机名到ip的映射,那么工作量非常大,对本地更新、网络资源占用都很浪费,所以出现了DNS。相关文件/etc/host 本地的一个小"DNS"文件。/etc/resolv原创 2016-03-31 16:26:02 · 11840 阅读 · 1 评论 -
Ubuntu搭建FTP(vsftpd)文件服务器
前言在开始介绍ftp服务器如何搭建前,先来介绍一些名词概念,以下名词均和文件服务器有关。SSH(Secure Shell):ssh是加密的shell,最初是用来替代telnet等无加密的远程登陆,相应的一个服务器是sshd。SSL(Secure Socket layer):是一个标准的加密和验证身份协议。FTP(File Transfer Protocol):是一个传输协议,相原创 2016-04-02 17:56:17 · 2444 阅读 · 0 评论 -
某公司笔试题——Linux fork()
直接来源代码:#include #include #include int main(){ for (int i = 0; i < 2; ++i) { fork(); printf("K"); } wait(NULL); return 0;}请问会输出多少个K?进程关系如下图:图.原创 2016-04-04 12:17:33 · 902 阅读 · 0 评论 -
Linux工作管理(job control)
前言当用户只有一个bash环境,而又想同时干多样事情,那么就可以用工作管理机制。值得注意的是,放进后台的工作不能够和用户有交互,例如vim是不可能在后台自动运行的。用法&指示符#tar -zpcf /tmp/etc.tar.gz /etc &[1] 8000 <=== [job number] PID在命令后面添加 & 符号,命令就会在后台执行。另外,原创 2016-04-01 19:30:54 · 691 阅读 · 0 评论 -
ubuntu自主配置ip地址
相关命令:ifconfig , route输出网卡信息#ifconfig -aifconfig基本用法:ifconfig {interface} {up|down} //启动、关闭网卡ifconfig interface {options} options: // 选项包括 up,down mtu netmask broad原创 2016-03-24 15:28:27 · 1135 阅读 · 0 评论 -
MinGW和MSYS的自动安装
原文:http://www.swingworks.net/2010/11/install_mingw_and_msys_with_mingw-get-inst/好吧,这是今天写的第二篇文章。我表示这篇才是今天的重头。(伪半年之前曾经写过一篇关于MinGW和MSYS的手动安装的文章[1],到现在还是全站点击率最高的。(目前这篇文章是最高的。)好吧,侧面反映了MinGW确实是Win上比转载 2016-09-20 11:15:40 · 861 阅读 · 0 评论