12 jasonliuvip

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 7w+

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

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

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

2014-05-19 16:04:12

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

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

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

2014-05-13 17:11:48

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

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

2014-05-12 15:12:47

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

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

2014-05-12 13:41:13

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

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

2014-05-12 11:25:26

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

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

2014-04-29 20:58:15

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

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

2014-04-17 00:26:10

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

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

2014-04-13 00:56:58

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

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

2014-04-13 00:43:56

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

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

2014-04-10 23:16:45

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

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

2014-04-09 23:09:45

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

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

2014-04-04 23:53:27

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

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

2014-04-04 22:43:24

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

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

2014-04-03 21:53:24

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

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

2014-04-02 22:10:10

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

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

2014-03-31 23:27:28

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

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

2014-03-31 21:58:19

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

查看更多

勋章 我的勋章
    暂无奖章