huyc

导航

2011年10月31日 #

shm_overview(7)

摘要: SHM_OVERVIEW(7)2008-06-25NAME shm_overview —— POSIX共享内存概述DESCRIPTIONPOSIX共享内存API允许矜持通过共享的内存区域交换信息。此接口提供的API有:shm_open(3) 创建和打开一个新的对象,或打开一个已存在的对象。这与open(2)类似。此调用返回一个文件描述符供下列接口使用。ftruncate(2) 设置共享内存对象的大小。(一个新创建的共享内存对象具有0长度。)mmap(2) 映射共享内存对象到调用进程的虚拟地址空间。munmap(2) 解除调用进程虚拟空间与共享内存对象的映射。shm_unlink(3) 移除.. 阅读全文

posted @ 2011-10-31 13:13 huyc 阅读(708) 评论(0) 推荐(0) 编辑

快速求积,快速求幂,大指数取模

摘要: 传说中的O(lgn)时间的快速算术算法和超大整数的取模算法。1.快速求积,a*b=a*2*b/2int fast_mul(int a, int b){ int m = 0; while(b){ if(b & 0x01){ //a*b = a+a(b-1) m += a; --b; }else{ //a*b = a*2*b/2 a <<= 1; b >>= 1; } } return m;}2.快速求... 阅读全文

posted @ 2011-10-31 12:20 huyc 阅读(1935) 评论(0) 推荐(0) 编辑

2011年10月30日 #

sem_overview(7)

摘要: SEM_OVERVIEW(7) 2009-02-25NAME sem_overview —— POSIX信号量概述DESCRIPTION POSIX信号量允许进程和线程同步它们的动作。一个信号量是一个整数,它的值永远不会降到0以下。仅能在信号量上执行两个操作:将信号量加1(sem_post(3)),将信号量减1(sem_wait(3))。如果信号量当前值为0,则sem_wait操作将阻塞,直至其值变得大于0。POSIX信号量有两种:命名信号量和未命名信号量。命名信号量命名信号量需要一个这种格式的名字:/somename。亦即,一个空字符结尾的,以斜线开头,最长NAME_MAX-4(即251)个 阅读全文

posted @ 2011-10-30 16:22 huyc 阅读(679) 评论(0) 推荐(0) 编辑

2011年10月29日 #

raw(7)

摘要: RAW(7) 2008-11-20NAME raw, SOCK_RAW —— Linux IPv4原始套接字SYNOPSIS#include <sys/socket.h>#include <netinet/in.h>raw_socket = socket(AF_INET, SOCK_RAW, int protocol);DESCRIPTION原始套接字允许在用户空间实现新的IPv4协议。一个原始套接字收发原始数据报不包括链路层头部。当发送一个数据包时IPv4层自动生成一个IP报头,除非启用了IP_HDRINCL套接字选项。当它被启用后,发送的数据包必须包括一个IP报头。 阅读全文

posted @ 2011-10-29 16:34 huyc 阅读(966) 评论(0) 推荐(0) 编辑

2011年10月25日 #

接力,智能指针也麻烦

摘要: C++的指针也不是很麻烦的东西,但是无数的人都说麻烦,弄了个智能指针来管理数据,原本就该小心的指针操作顿时变得需要耐心,细心而有毅力……核心问题在于,智能指针的引用计数是要通过拷贝函数或者构造函数传递的,表面上看,+1-1=0,但是实际上不完全是这么回事,如果将对象分别包装两次,那这个对象也会被释放两次。问题是智能指针计数为0时的副作用——它会释放掉这个对象,这就导致了指针使用上的歧义,明明没有释放,但莫名其妙的就没了,而且如果整个程序都用智能指针的话,跟踪出来哪里实际delete了指针可能很困难。另外存在的一个问题也很明显,如果将一个栈指针包装到智能指针里,释放的时候指不定出什么事情,但是却 阅读全文

posted @ 2011-10-25 18:38 huyc 阅读(215) 评论(0) 推荐(0) 编辑

2011年10月23日 #

poll(2)

摘要: POLL(2)NAME poll,ppoll —— 等待文件描述符上的事件SYNOPSIS#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);#define _GNU_SOURCE#include <poll.h>int ppoll(struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, const sigset_t *sigmask);DESCRIPTIONpoll执行类似于select的任务:等待文件描 阅读全文

posted @ 2011-10-23 22:27 huyc 阅读(3191) 评论(0) 推荐(2) 编辑

2011年10月21日 #

约瑟夫环问题

摘要: 约瑟夫环问题,网上的解答都是一堆的数学字符,看着就不舒服,演示一下直观的算法(9,5):O (0+5)%2 = 0o O (0+5)%2 = 1O o o (1+5)%3 = 0o O o o (0+5)%4 = 1o O o o o (1+5)%5 = 1O o o o o o (1+5)%6 = 0o o o o o O o (0+5)%7 = 5o o O o o o o o (5+... 阅读全文

posted @ 2011-10-21 22:16 huyc 阅读(375) 评论(0) 推荐(0) 编辑

pthreads(7)

摘要: PTHREADS(7) 2008-11-18NAME pthreads —— POSIX线程DESCRIPTIONPOSIX.1指定了一个接口集(函数,头文件)用于线程化编程俗称POSIX线程。单个进程可以包含多个线程,所有的线程都在一个程序中执行。这些线程共享一样的全局内存(数据段和堆段),但是每个线程有自己的堆栈(自动分配)POSIX.1要求给出线程属性的共享范围(这些属性是全局进程的而非线程私有的):- 进程ID- 父进程ID- 进程组ID和会话ID- 控制终端- 用户和组ID- 打开的文件描述符- 记录锁(参见fcntl(2))- 信号处理函数- 文件模式掩码(umask(2))-.. 阅读全文

posted @ 2011-10-21 00:50 huyc 阅读(938) 评论(0) 推荐(0) 编辑

2011年10月20日 #

signal(7)

摘要: SIGNAL(7) 2008-10-15NAME signal —— 信号概述DESCRIPTIONLinux支持POSIX可靠信号(以下称之为“标准信号”)和POSIX实时信号。信号处理方式每个信号都有一个当前的处理方式,该方式决定了进程被递送信号时该如何处理。下表的每个表项都在“Action”列指出了信号的默认处理方式,像这样: Term 默认动作为终止进程。 Ign 默认动作是忽略信号。 Core 默认动作是终止进程并转储(参见core(5))。 Stop 默认动作是停止进程。 Cont 默认动作是继续进程执行,如果进程当前处于停止状态。一个进程可以使用... 阅读全文

posted @ 2011-10-20 14:22 huyc 阅读(8226) 评论(0) 推荐(0) 编辑

2011年10月19日 #

packet(7)

摘要: PACKET(7) 2008-08-08NAME packet, AF_PACKET —— 设备层的包接口。SYNOPSIS#include <sys/socket.h>#include <netpacket/packet.h>#include <net/ethernet.h> /* the L2 protocols */packet_socket = socket(AF_PACKET, int socket_type, int protocol);DESCRIPTION包套接字用于收发设备层(OSI二层)的原始数据包。这允许用户在用户空间实现物理层顶部的协 阅读全文

posted @ 2011-10-19 10:03 huyc 阅读(7766) 评论(0) 推荐(0) 编辑