Linux后台服务器编程。
发布时间:2014-11-04 15:24:38
#include <sys/socket.h>int setsockopt( int socket, int level, int option_name,const void *option_value, size_t option_len);第一个参数socket是套接字描述符。第二个参数level是被设置的选项的级别,如果想要在套接字级别上设置选项,就必须把level设置为 SOL_SOCKET。option_name指定准备设置的选项,option.........【阅读全文】
发布时间:2014-08-18 16:25:56
8 高性能服务器程序框架服务器解构为三个主要模块:IO处理单元。四种IO模型和两种高效事件处理模式。逻辑单元。两种高效并发模式。存储单元。(暂不讨论)IO模型:阻塞IO非阻塞IOIO复用//程序阻塞于IO复用系统调用,但可同时监听多个IO事件。SIGIO信号//信号触发读写就绪事件,用户程序执行读写操作,程.........【阅读全文】
发布时间:2014-10-25 16:23:02
服务器的创建分为两个步骤:1、建立socket;2、创建线程。两点内容的细节:1、建立socket方面:socket()bind()listen()accept()read()write()close()//关闭套接字时候在线程中关闭,而且只需关闭一次,在父进程中无须关闭socket,这一点不同于fork创建的进程。相关的套接字API如上所示。2、创建线程方面.........【阅读全文】
发布时间:2014-10-21 21:43:47
前言 读了三年的研究生,没有碰过web相关开发了。本科的三年的web开发经验都忘记完了。工作找好了,最近准备开始重新复习一下C和web相关的知识,以前做web开发的时候主要是主要是用PHP那几十个API来做系统开发,对PHP底层没有去学习过,最近打算从CGI出发,从本质上来了解一下web底层相关技术。.........【阅读全文】
发布时间:2014-10-21 20:31:16
为什么要进行 CGI 编程? 在 HTML 中,当客户填写了表单,并按下了发送(submit)按钮后,表单的 内容被发送到了服务器端,一般的,这时就需要有一个服务器端脚本来对表单的 内容进行一些处理,或者是把它们保存起来,或者是按内容进行一些查询,或者 是一些别的什么。没有了 CGI,WEB 的世界就完全失去了它的交互性,所有.........【阅读全文】
发布时间:2014-09-21 23:39:39
“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程.........【阅读全文】
发布时间:2014-09-13 10:42:09
下面是高性能服务器邮件组(http://groups.google.com/group/dev4server)上一次问答。lizp.net的问题还是从字面“流”来理解TCP时带来的疑问。如果是“流”,怎么发送,什么时候确认?什么时候分片?怎么接受?我对此进行了较详细的回答。感觉这个问题比较典型,所以重新整理编辑补充。lizp.net问:一般来说,.........【阅读全文】
发布时间:2014-09-11 12:16:08
在Linux socket关闭连接的方法有两种分别是shutdown和close,首先看一下shutdown的定义#include<sys/socket.h>int shutdown(int sockfd,int how);how的方式有三种分别是SHUT_RD(0):关闭sockfd上的读功能,此选项将不允许sockfd进行读操作。SHUT_WR(1):关闭sockfd的写功能,此选项将不允许.........【阅读全文】
发布时间:2014-09-11 11:51:20
我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试. 但是服务器总是莫名退出,没有core文件.最后问题确定为, 对一个对端已经关闭的socket调用两次write, 第二次将会生成SIGPIPE信号, 该信号默认结束进程.具体的分析可以结合TCP的"四次握手"关闭. TCP是全双.........【阅读全文】
发布时间:2014-08-25 11:56:08
Linux下tcp连接断开的时候调用close()函数,有优雅断开和强制断开两种方式。那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger结构体属性。linger结构体数据结构如下: #include <arpa/inet.h> struct linger { int l_onoff; int l_linger;}; 三种断开方式:1..........【阅读全文】
发布时间:2014-08-19 18:35:38
5 Linux网络编程基础API1、socket地址API。2、socket基础API。主要定义在sys/socket.h头文件中,包括创建socket、命名socket、监听socket、接收连接、发起连接、读写数据、获取地址信息、检测带外标记,以及读取和设置socket选项。3、网络信息API。Linux提供了一套网络信息API,实现主机名和ip地址之间的转换.........【阅读全文】
发布时间:2014-08-18 23:52:37
6 高级IO函数:用于创建文件描述符:pipe、dum/dup2用于读写数据:readv/writev、sendfile、mmap/munmap、splice、tee用于控制IO行为和属性:fcntl管道:#include <unistd.h>int pipe(int fd[2]);默认情况下这对文件描述符都是阻塞的。如果用read调用读取一个空管道,read将会阻塞直到有数据可读为止;write.........【阅读全文】
发布时间:2014-08-18 20:36:01
7 Linux服务器程序规范1、一般以后台程序运行。(daemon)没有控制终端,因而不会意外接收到用户输入。父进程通常为init.2、通常有一套日志系统,至少能输出日志到文件,有的高级服务器能输出到专门的udp服务器。大部分后台程序都在/var/log目录下有自己的日志目录。3、一般以某个专门的非root身份运行。如mysq.........【阅读全文】
发布时间:2014-08-18 00:04:22
9 IO复用#include <sys/select.h>int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct timeval* timeout);nfds指定被监听的文件描述符的总数。通常是select监听的所有文件描述符的最大值加1,因为文件描述符从0开始计数。#include <typesizes.h>#define __FD_SETSIZE 1024.........【阅读全文】
发布时间:2014-08-17 20:27:37
10信号#include #include int kill(pid_t pid, int sig);pid>0pid=0//信号发送给本进程组内的其他进程pid=-1//发送给除init之外的所有进程,但发送者要拥有对目标进程发送信号的权限pid......【阅读全文】
发布时间:2014-08-17 19:35:07
14 多线程编程创建线程和结束线程#include int pthread_create(pthread_t* thread, const pthread_attr_* attr, void* (*start_routine)(void*), void* arg);pthread_t是一个整形数,Linux上几乎所有的资源标示符都是一个整形数,比如socket、各种ipc标示符等。int pthread_exit(void* retval);一个进.........【阅读全文】
发布时间:2014-08-17 15:37:47
Linux高性能服务器编程13多进程编程#include #include pid_t fork(void);子进程的代码和父进程完全相同,同时它还会复制父进程的数据(堆栈数据和静态数据),数据的复制采用写时复制(copy on write);父进程打开的文件描述符在子进程中也打开,且文件描述符引用计数加1.且父进程的.........【阅读全文】
发布时间:2014-08-13 16:59:05
http://www.enterprisenetworkingplanet.com/netos/article.php/3442341I confess, I'm an outlaw at heart. I like using packet sniffers like tcpdump because it satisfies my base snooping impulses. Packet-sniffing is wiretapping after all, only it's applied to TCP/IP packets, not voice tr.........【阅读全文】
发布时间:2014-08-04 08:43:27
最近项目组中有个同事使用epoll+多线程实现了一个简单的服务器,但是经过压测后,发现如果使用边缘触发模式的话,就会出现丢包现象,水平触发设置等待时间确实解决了丢包问题,但却影响了服务器的性能。所以我就写了一个epoll+多进程的模型,代码如下:#include <sys/socket.h> #include <sys/epoll.h> .........【阅读全文】
发布时间:2014-08-03 21:34:44
Client:#include <sys/stat.h>#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <netdb.h>#include <fcntl.h>#include <unistd.h>#include <netinet/in.h>#include &nb.........【阅读全文】
发布时间:2014-07-31 15:39:17
[-]概念理解Linux下的五种IO模型阻塞IO模型非阻塞IO模型IO复用模型信号驱动IO异步IO模型个IO模型的比较selectpollepoll简介socket阻塞与非阻塞,同步与异步作者:huangguisu.........【阅读全文】
发布时间:2014-07-29 23:58:19
Linux_c 编程——判断编译器是大端还是小端,有需要的朋友可以参考下。Linux_c 编程——判断编译器是大端还是小端1. 什么是大端,什么是小端:所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位.........【阅读全文】
tianyashuibin2014-12-08 11:22
Oscarzhao:c++11 中貌似可以
嗯,是的,在c++11中可以
下面是在gcc的编译结果:
test_struct.cc:8:11: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
int a = 1;
^
tianyashuibin2014-10-23 21:57
除了静态数据成员外,数据成员不能在类体内显式的初始化
举个最简单例子
struct a
{
int a=1;
int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间
tianyashuibin2014-10-23 21:39
1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员
2.进入构造函数后在构造函数中执行一般计算
1.类里面的任何成员变量在定义时是不能初始化的。
2.一般的数据成员可以在构造函数中初始化。
3.const数据成员必须在构造函数的初始化列表中初始化。
4.static要在类的定义外面初始化。
5.数组成员是不能在初始化列表里初始化的。
6.不能给数组指定明显的初始化。
这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。
tianyashuibin2014-10-23 21:32
记住静态成员这样初始化:
C/C++ code
class A
{
public:
static const int a[3];
};
const int A::a[3] = {1,2,3};