自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (18)
  • 收藏
  • 关注

转载 linux C之access函数

access():判断是否具有存取文件的权限相关函数   stat,open,chmod,chown,setuid,setgid表头文件   #include定义函数   int access(const char * pathname, intmode);函数说明   access()会检查是否可以读/写某一已存在的文件。参数mode有几种情况组合

2014-07-03 14:38:38 1030

原创 linux网络编程二十八:多线程编程之统一信号处理

1. 以下代码取自pthread_sigmask函数的man手岫

2014-05-19 16:04:12 1122

原创 linux网络编程二十七:多线程编程之信号量、互斥锁和条件变量

1. locker.h#ifndef __LOCKER_H__#define __LOCKER_H__#include #include #include class sem{public: sem() { if (sem_init(&m_sem, 0, 1) != 0) throw std::exception();

2014-05-19 15:25:32 1112

原创 轮询调度算法(Round-Robin Scheduling)

轮询调度算法(Round Robin Scheduling)算法就是以循环的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。

2014-05-13 17:11:48 24693 1

原创 linux网络编程二十六:多进程编程之消息队列

1、把子进程中打开的文件描述符传递给父进程。

2014-05-12 15:12:47 1230

原创 linux网络编程二十五:多进程编程之共享内存

共享内存是最高效的IPC机制,因为它不涉及进程之间的任何数据传输。这种高效率带来的问题是我们必须用其它辅助手段来同步进程对共享内存的访问,否则会产生竞态条件。linux共享内存的API都定义在sys/shm.h中,包括4个系统调用:shmget , shmat , shmdt , shmctl 。linux还提供了另一种利用mmap在无关进程之间共享内存的方式。这种方式无须任务文件

2014-05-12 13:41:13 1798

原创 linux网络编程二十四:多进程编程之信号量

一、semget系统调用semget系统调用创建一个新的信号量集,或者获取一个已经存在的信号量集。key参数是一个键值,用来标识一个全局唯一的信号量集,就像文件名全局唯一的标识一个文件一样。要通过信号量通信的进程需要使用相同的键值来创建或获取该信号量。num_sems参数指定要创建或获取的信号量集中信号量的数目。如果是创建信号量,则该值必须指定;如果是获取已存在的信号量,则

2014-05-12 11:25:26 1298

原创 linux网络编程二十三:高性能定时器之时间堆

前面我们讨论的定时方案都是以固定的频率调用心跳函数tick,并在其中依次检测到期的定时器,然后执行到期定时器上的回调函数。设计定时器的另外一种思路是:将所有定时器中超时时间最小的一个作为心跳间隔。这样,一旦心跳函数tick被调用,超时时间最小的定时器必然到期,我们就可以在tick函数中处理该定时器。然后再次从剩余的定时器中找出超时时间最小的一个,并将这段最小时间设置为下一次心跳间隔。如此反

2014-04-29 20:58:15 5135 5

原创 linux网络编程二十二:高性能定时器之时间轮

之前我们提到,基于排序链表的定时器存在一个问题:添加定时器的效率偏低。

2014-04-17 00:26:10 7519

原创 linux网络编程二十一:利用SIGALRM信号,实现一个简单的基于升序链表的定时器

由alarm和setitimer函数设置的实时闹钟一旦超时

2014-04-13 00:56:58 2024

原创 linux网络编程二十:socket选项:SO_RCVTIMEO和SO_SNDTIMEO

SO_RCVTIMEO和SO_SNDTIMEO ,它们分别用来设置socket接收数据超时时间

2014-04-13 00:43:56 38083

原创 linux网络编程十九:用SIGURG检测外带数据是否到达

在linux环境下,内核通知应用程序外带数据到达主要有两种方法:1. I/O复用技术2. 使用SIGURG信号

2014-04-10 23:16:45 1666 1

原创 linux网络编程十八:统一事件源

信号是一种异步事件:信号处理函数和程序的主循环是两条不同的执行路线。

2014-04-09 23:09:45 1786 2

原创 linux网络编程十七:I/O复用的应用-同时处理TCP和UDP服务

在此之前,我们讨论的服务器程序都只监听一个端口。在实际应用中,有不少服务器程序能同时监听多个端口,比如超组服务xinet。从bind系统调用的参数看,一个socket只能绑定一个socket地址。因此,要监听多个端口就必须创建多个socket,并绑定到各个端口上。这样一来,服务器程序就需要同时管理多个监听socket,I/O复用技术就有了用武之地。另外,即使是同一个端口,如果服务器

2014-04-04 23:53:27 1364

原创 linux网络编程十六:I/O复用的应用-poll简单实现聊天室程序

这次我们以poll为例实现一个简单的聊天室程序,实现让所有用户同时在线群聊,分为客户端和服务端两部分。客户端有两个功能:一是从标准输入终端读取用数据,并将用户数据发关至服务器;二是往标准输出终端打印服务器发送给它的数据。服务端功能是接收客户数据,并把客户数据发送给每一个登录到该服务器上的客户端(数据发送者除外)。1. 客户端使用poll监听用户输入和网络连接,并利用sp

2014-04-04 22:43:24 2092 1

原创 linux网络编程十五:I/O复用的应用-非阻塞connect

connect系统调用的man手册中描述了connect出错时的一种errno值:EINPROGRESS这种错误发生在对非阻塞的socket调用connect,而连接又没建立时。根据 man 文档解释,在这种情况下我们可以调用 select 、 poll等函数来监听这个连接失败的socket上的错误。如果错误码是0,表示连接成功,否则连接失败。1. 代码实现

2014-04-03 21:53:24 1891

原创 linux网络编程十四:I/O复用epoll

epoll是linux特有的I/O复用函数,它在实现上与select、poll有很大差异。首先,epoll使用一组函数来完成任务,而不是单个函数。其次,epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中,从而无需像select和poll那样每次调用都要重复传入文件描述符或事件集。但epoll需要使用一个额外的文件描述符,来唯一标识内核中的这个事件表。1. epoll_

2014-04-02 22:10:10 1361

原创 linux网络编程十三:I/O复用select

最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。I/O复用使得程序能够同时监听多个文件描述符,对提高程序的性能至关重要。通常,网络程序在下列情况下需要使用I/O复用技术:A.  客户端程序要同时处理多个socket。B.  客户端程序要同时处理用户输入和网络连接。比如:聊天室C.  TCP服务器要同时监听socket和连

2014-03-31 23:27:28 1519

原创 linux网络编程十二:简单模拟HTTP请求的读取和分析

最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。1. 我们简单模拟HTTP请求的读取和分析判断HTTP头部结束的依据是遇到一个空行,该空行仅包含一对回车换行符 。如果一次读操作没有读入HTTP请求的整个头部, 即没有遇到空行, 那么我们必须等待客户继续写数据并再次读入。因此,我们每完成一次读操作,就要分析新读入的数据中是否有空行。在寻找

2014-03-31 21:58:19 3144

原创 linux网络编程十一:将程序后台化,以守护进程的方式运行

1. 代码#include #include #include #include #include #include #include bool daemonize(){ pid_t pid = fork(); if (pid < 0) { return false; } else if (pid > 0) { exit(0); } umask(0

2014-03-30 23:53:08 1934

原创 linux网络编程十:用tee在管道间复制数据,进行零拷贝操作

最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。1. tee函数#include ssize_t tee(int fd_in, int fd_out, size_t len, unsigned int flags);tee在两个管道文件描述之间复制数据,也是零拷贝操作。它的参数与splice相同,但fd_in和fd_out都必须是

2014-03-30 23:42:09 1630 1

原创 linux网络编程九:splice函数,高效的零拷贝

最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。1. splice函数#include ssize_t splice(int fd_in, loff_t *off_in, int fd_out, loff_t *off_out, size_t len, unsigned int flags);splice用于在两个文件描述符之间移动数

2014-03-30 19:11:48 13775 9

原创 linux网络编程八:高效的sendfile,实现零拷贝

最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。1. sendfile函数#include ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);sendfile在两个文件描术符之间直接传递数据,完全在内核中操作,从而避免了内核缓冲区到用户缓冲区的拷贝

2014-03-30 18:49:58 1940

原创 linux网络编程七:分散读readv和集中写writev

最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。1. 分散读readv 和 集中写writevreadv将数据从文件描述符读到分散的内存块中,即分散读。writev将多块分散的内存一并写入文件描述符中,即集中写。#include ssize_t readv(int fd, const struct iovec *vector, i

2014-03-30 18:33:44 4221

原创 linux网络编程六:利用dup模拟实现一个基本的CGI服务器

最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。1. 重定向dup和dup2#include int dup(int file_descriptor);int dup2(int file_descriptor_one, int file_descriptor_two);dup创建一个新的文件描述符, 此描述符和原有的file_d

2014-03-30 17:53:25 1117

原创 linux网络编程五:gethostbyname, getservbyname

最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。1. 根据主机名称获取主机的完整信息#include struct hostent *gethostbyname(const char *name);name参数为主机名返回的是hostent结构体的指针:#include struct hostent{ ch

2014-03-30 17:30:52 4521 1

原创 linux网络编程四:socket选项: SO_REUSEADDR, SO_RCVBUF, SO_SNDBUF

最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。1. 读取和设置socket文件描述符属性:#include int getsockopt(int sockfd, int level, int option_name, void *option_value, socklen_t *restrict option_len);int

2014-03-30 16:53:35 14399

原创 linux网络编程三:recv, send 的调用

最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。#include #include ssize_t recv(int sockfd, void *buf, size_t len, int flags);ssize_t send(int sockfd, const void *buf, size_t len, int flags);

2014-03-30 16:03:42 1550

原创 linux网络编程二:基础socket, bind, listen, accept, connect

最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。1. 创建socket#include #include int socket(int domain, int type, int protocol); domain参数为底层协议族:PF_INET(用于IPv4),PF_INET6(用于IPv6);对于UNIX本地域协议族为PF_UN

2014-03-30 15:43:54 9247

原创 linux网络编程一:主机字节序与网络字节序的的判断

最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。        现代CPU的累加器一次能装载至少4字节(32位),即一个整数。那么这4字节在内存中排列的顺序将影响它被累加器装载成的整数值,这就是字节序问题。        字节序分大端字节序(big endian)和小端字节序(little endian),大端字字节序是指一个整数的高位字节

2014-03-30 13:21:11 2223 1

linux学习合集(8个文档)超值

linux学习合集: Linux内核快速入门学习.txt Linux系统管理员指南.zip Linux 系统命令及其使用详解大全.pdf LINUX必学的60个命令.txt Vim.User.Manual.pdf mysql.chm Linux.C.Api.chm Linux内核API函数.chm

2014-03-28

vim.user.manual.vim中文教程

vim.user.manual. vim中文教程 操作+脚本使用+插件编写

2014-03-28

3d数学基础图形与游戏开发

《3D数学基础:图形与游戏开发》介绍了基础概念,如向量、坐标空间、矩阵、变换、欧拉角、齐次坐标空间、几何图元、相交性检测和三角网格。 第1章 简介 1.1 什么是3D数学 1.2 为什么选择本书 1.3 阅读本书需要的基础知识 1.4 概览 第2章 笛卡尔坐标系统 2.1 1D数学 2.2 2D笛卡尔数学 2.3 从2D到3D 2.4 练习 第3章 多坐标系 3.1 为什么要使用多坐标系 3.2 一些有用的坐标系 3.3 嵌套式坐标系 3.4 描述坐标系 3.5 坐标系转换 3.6 练习 第4章 向量 4.1 向量——数学定义 4.2 向量——几何定义 4.3 向量与点 4.4 练习 第5章 向量运算 5.1 线性代数与几何 5.2 符号约定 5.3 零向量 5.4 负向量 5.5 向量大小(长度或模) 5.6 标量与向量的乘法 5.7 标准化向量 5.8 向量的加法和减法 5.9 距离公式 5.10 向量点乘 5.11 向量叉乘 5.12 线性代数公式 5.13 练习 第6章 3D向量类 …… 第7章 矩阵 第8章 矩阵和线性变换 第9章 矩阵的更多知识 第10章 3D中的方位与角位移 第11章 C++实现 第12章 几何图元 第13章 几何检测 第14章 三角网络 第15章 图形数学 第16章 可见性检测 第17章 后记 附录A 简单的数学概念 附录B 参考文献

2010-05-16

DirectX 9.0 3D 游戏开发编程基础

本书主要介绍如何使用DirectX 9.0开发交互式3D图形程序,重点是游戏开发。全书首先介绍了必要的数学工具,然后讲解了相关的3D概念。其他主题几乎涵盖了Direct3D中的所有基本运算,例如图元的绘制、光照、纹理、Alpha融合、模板,以及如何使用Direct3D实现游戏中所需的技术。介绍顶定点着色器和像素着色器的章节 (包含了效果框架和新的高级着色语言的内容)对这些关键运算进行了较为集中的讨论。 本书内容深入浅出,内容广泛,可供从事3D游戏程序设计、可视化系统设计或其他图形应用程序开发的开发人员和大中专院校学生参考,也极适合各种游戏开发培训机构作为Direct3D编程的培训教程。 收录第一至第十九章

2010-05-16

权限设计方案[RAR]

权限设计方案...........................................

2009-05-18

javascript活学活用300问

javascript活学活用300问..........................

2009-05-18

精通Java Web动态图表编程[.PDF]

精通Java Web动态图表编程........................................

2009-05-18

CodeSmith开发[.pdf]

CodeSmith开发.........................................

2009-05-18

泛型详解[.DOC]

泛型详解...............................

2009-05-18

ActionScript3.0中文手册

ActionScript3.0中文手册.................

2009-05-18

flex3cookbookzhcn_airia.中文版

flex3cookbook_zhcn_airia. 中文版

2009-05-18

受用一生的公式[pdf]

受用一生的公式... 很不错的..................................

2009-05-18

MFC深入浅出简体中文版.rar

MFC深入浅出简体中文版... 不错的东西...

2009-05-18

java笔试题大集合及答案(jsp-java-ejb公司笔试题)

java笔试题大集合及答案 (jsp-java-ejb公司笔试题)...

2009-05-18

MVC详解:了解真正所谓的框架

MVC详解:了解真正所谓的框架. 如果在面试的时候问这些程序员,你们为什么要学习这些框架?这些框架的本质到底是什么?似乎很少很少有人能够给我非常满意的答复。因为他们都在为了学习而学习,为了工作而学习,而不是在真正去深入了解一个框架。其实所有的人都应该思考这样的问题:为什么要学习框架?框架到底给我带来了什么?...

2009-05-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除