
C++
文章平均质量分 65
hwz_119
这个作者很懒,什么都没留下…
展开
-
Select()系统调用及文件描述符集fd_set的应用
Select()系统调用及文件描述符集fd_set的应用在网络程序中,一个进程同时处理多个文件描述符是很常见的情况。select()系统调用可以使进程检测同时等待的多个I/O设备,当没有设备准备好时,select()阻塞,其中任一设备准备好时,select()就返回。 select()的调用形式为:转载 2007-03-19 13:59:00 · 1920 阅读 · 0 评论 -
用OpenSSL编写SSL,TLS程序 - Win32版
以下文章copy自 http://www.sinzy.net/Blog/Read.asp?ID=44&BID=11482 2006-12-21 23:10:58 用OpenSSL编写SSL,TLS程序 学习类 from: www.sqlite.com.cn一、简介:SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为转载 2007-03-19 22:36:00 · 1891 阅读 · 0 评论 -
TCP/IP编程基础——超时、多路复用、非阻塞
在TCP连接中,recv等函数默认为阻塞模式(block),即直到有数据到来之前函数不会返回,而我们有时则需要一种超时机制使其在一定时间后返回而不管是否有数据到来,这里我们就会用到setsockopt()函数: int setsockopt(int s, int level, int optname, void* optval, socklen_t* optlen); 这里我们要涉转载 2007-03-19 14:01:00 · 1756 阅读 · 0 评论 -
TCP的socket连接示例
Made In Zeal 转载请保留原始链接:http://www.zeali.net/entry/13关键字: Socket,TCP,timeout,超时,异步,ioctl用C实现的TCP socket连接/读/写操作。采用fcntl设置非阻塞式连接以实现connect超时处理;采用select方法来设置socket读写超时。此示例可被编译运行于Windows/unix系统。转载 2007-03-19 16:27:00 · 2876 阅读 · 1 评论 -
C宏--智者的利刃,愚者的恶梦
水平不高不低的C++程序员最喜欢挂在嘴上的一句话就是:C宏,万恶之首,错误的开端,应该被废弃。 请注意,我用了 一句不敬的修饰语“水平不高不低的”。为什么这么说?因为水平低都插不上话,都在在静静地听老前辈布道呢。水平高的,比如Bane Stroustrup老人家,也只是说若干种场合下C++语言能够提供比C macro更好的解决方案,而没有完全否定C macro的价值。但是话就怕传来传去,一传转载 2007-03-16 15:34:00 · 724 阅读 · 0 评论 -
C++中extern “C”含义深层探索
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程 式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支 持函数的重载,C++对全局函数的处理方式与C有明转载 2007-03-16 15:30:00 · 704 阅读 · 0 评论 -
解析#pragma指令
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C ++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为: #Pragma Para其中Para 为参数,下面来看一些常用的参数。(1转载 2007-03-16 16:18:00 · 1339 阅读 · 0 评论 -
结构体数组的定义和引用
单个的结构体类型变量在解决实际问题时作用不大,一般是以结构体类型数组的形式出现。结构体类型数组的定义形式为:struct stu / *定义学生结构体类型* /{char name[20]; / *学生姓名* /char sex; / *性别* /long num; / *学号* /float score[3]; / *三科考试成绩* /};struct stu stud[20]; 定/*义结构体转载 2007-03-21 09:34:00 · 4262 阅读 · 0 评论 -
怎样及时检测出非正常断开的TCP连接
此处的”非正常断开”指TCP连接不是以优雅的方式断开,如网线故障等物理链路的原因,还有突然主机断电等原因 有两种方法可以检测:1.TCP连接双方定时发握手消息 2.利用TCP协议栈中的KeepAlive探测 第二种方法简单可靠,只需对TCP连接两个Socket设定KeepAlive探测,所以本文只讲第二种方法在Linux,Window2000下的实现(在其它的平台上转载 2007-03-21 21:46:00 · 1688 阅读 · 0 评论 -
Socket编程中select()的妙用
发信站: 华南网木棉站 (Tue Aug 4 15:43:41 1998), 转信 【 原文由 cpu 所发表 】 用过 WinSock API 网友们知道:WinSock 编程中有一很方便的地方便是其 息驱动机制,不管是底层 API 的 WSAAsyncSelect() 还是 MFC 的异步Socket类: CAsyncSocket,都提供了诸如 FD_ACCEPT、FD_REA转载 2007-03-22 15:25:00 · 749 阅读 · 0 评论 -
关于网络编程(服务端)的一些笔记
针对服务器处理网络连接的几种方式,unix网络编程里给出了9种方案,并且对服务器进程/线程的开销做了一个量化的比较。从个人经验出发,觉得以下几种方式是比较实用的:1.最简单的是堵塞Accept,收到连接后fork进程(unix)或创建Thread.原进程/线程继续堵塞Accept,创出来的进程线程只处理新连接上的客户请求。如果忽略创建进程/线程的开销,以及每个连接必须对应一个进程/线程的话,做转载 2007-03-22 15:42:00 · 1419 阅读 · 0 评论 -
Linux程式设计(转载)二
Linux程式设计- 6.syslog在Linux下有个syslogd的Daemon程式,syslog是个系统管理员必看的档案。因此,如果您的程式有除错或安全讯息要显示,写到syslog是个很好的选择。 syslog有三个函数,使用上,一般您只需要用syslog(...)这个函数即可,一般使用状况下,openlog/closelog是可有可无的。 syslog()中的priority是fa转载 2007-03-22 20:05:00 · 1075 阅读 · 0 评论 -
一个读线程,一个写线程同时操作一个套接字
一个读线程,一个写线程同时操作一个套接字是没问题的,但必需主意一点:做错误处理时非法同步的准备,即保证在出现SOCKET错误时只有一个处理函数被调用,而不是2个线程同时调用2个,否则将发生问题原创 2007-06-25 09:46:00 · 1887 阅读 · 0 评论 -
有关效率
list支持快速的插入和删除,但是查找费时 vector支持快速的查找,但是插入费时 如果你从百万个数据文件中读取数据,你可以考虑先把数据全部读到vector中,然后排序,再用binary_search算法查找,这个算法如果搭配的是随机iterator,复杂度是对数的。这个复杂度和map的查找复杂度一样的快。因此,不考虑内存问题,按你的意图,vector是更好的选择。C++标准转载 2007-06-20 21:25:00 · 1243 阅读 · 0 评论 -
线程安全的队列
#ifdef WIN32 #include #else #include #include #endif #include #include #include #include using namespace std; //这个是线程安全的队列,Synchronized类的实现在下面 template class SyncQueue:public Synchronized{转载 2007-06-23 13:37:00 · 2000 阅读 · 0 评论 -
C++的数据类型转换关键字dynamic_cast
C++的数据类型转换关键字dynamic_cast 作者:抱雪 更新时间: 2005-05-13转载 2007-06-20 23:45:00 · 814 阅读 · 0 评论 -
基于TCP/IP的局域网多用户通信
基于TCP/IP的局域网多用户通信作者:华东船舶工业学院机械系 袁 渊下载本文示例源代码摘要:基于TCP/IP的网络通信技术实现了面向连接的用户与服务器间点对点异步通信,本文在该基础上应用了多线程以及共享数据结构技术,使网络服务器具有了多用户间数据转发的功能,进而解决了局域网多用户间的通信问题。关键词:TCP/IP;多线程;共享;通信;网络引言由于因特网的迅速流行,越来越多的应用程转载 2007-06-24 15:34:00 · 1072 阅读 · 0 评论 -
使您的軟體執行起來: 防止緩衝區溢位
透過防禦性程式化保護程式碼 級別: 入門 Gary McGrawReliable Software转载 2007-06-27 18:48:00 · 2562 阅读 · 0 评论 -
C语言中可变参数的用法
C语言中可变参数的用法 我们在C语言编程中会遇到一些参数个数可变的函数,例如printf() 这个函数,它的定义是这样的: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是 可变的,例如我们可以有以下不同的调用方法: printf("%d",i); printf("%s",s); printf("t转载 2007-06-27 19:20:00 · 719 阅读 · 0 评论 -
Linux文件类型及文件的扩展名
1、Linux文件的扩展名; 一谈到文件类型,大家就能想到Windows的文件类型,比如file.txt、 file.doc、file.sys、file.mp3、file.exe等,根据文件的后缀就能判断文件的类型。但在Linux一个文件是否能被执行, 和后缀名没有太大的关系,主要看文件的属性有关。但我们了解一下Linux文件的后缀名还是有必要的,特别是我们自己创建一些文件,最好还转载 2007-06-27 21:21:00 · 689 阅读 · 0 评论 -
用chkconfig轻松管理启动程序
由 徐永久 发表于 2001年10月16日 21:07。 想知道Linux 下面和 autoexec.bat 或者 config.sys 或者 98 的 msconfig 一样的东西么? 简介:本文通过对chkconfig 的介绍,为Linux 系统管理员 轻松管理 /etc/rc[0-6].d 目录下众多的符号转载 2007-06-27 21:24:00 · 643 阅读 · 0 评论 -
标准库:容纳指针的容器
The Standard Librarian: I/O and Function Objects: Containers of PointersMatthew Austernhttp://www.cuj.com/experts/1910/austern.htm?topic=experts-----------------------------------------------原创 2007-06-28 14:51:00 · 1942 阅读 · 0 评论 -
在删除选项中仔细选择
条款9:在删除选项中仔细选择假定你有一个标准STL容器,c,容纳int,Container c; 而你想把c中所有值为1963的对象都去掉。令人吃惊的是,完成这项任务的方法因不同的容器类型而不同:没有一种方法是通用的。如果你有一个连续内存容器(vector、deque或string——参见条款1),最好的方法是erase-remove惯用法(参见条款32):c.erase转载 2007-06-29 10:34:00 · 891 阅读 · 0 评论 -
C/C++字节对齐
什么是对齐,以及为什么要对齐:现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。对 齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其转载 2007-07-04 19:51:00 · 2170 阅读 · 0 评论 -
dynamic_cast详解
作为四个内部类型转换操作符之一的dynamic_cast和传统的C风格的强制类型转换有着巨大的差别。除了 dynamic_cast以外的转换,其行为的都是在编译期就得以确定的,转换是否成功,并不依赖被转换的对象。而dynamic_cast则不然。在这 里,不再讨论其他三种转换和C风格的转换。首先,dynamic_cast依赖于RTTI信息,其次,在转换时,dynamic_cast会检查转换的sou转载 2007-07-10 19:22:00 · 1271 阅读 · 0 评论 -
什么是Pro*C/C++
ORACLE支持几种高级语言中内嵌入SQL语句,或ORACLE库函数调用来访问数据库。它们是C,COBOL,Ada,PASCAL,PL/I等,这些语言称之为宿主语言,用它们开发的程序就称为PRO* 程序,如PRO*C,PRO*COBOL等。PROC在ORACLE的客户端软件中就有,安装oracle时选上即可。1.什么是Pro*C/C++ 通过在过程化编程语言C/C++中嵌入SQL语句而开发原创 2007-07-11 23:55:00 · 13977 阅读 · 1 评论 -
什么是URI
Web上可用的每种资源 - HTML文档、图像、视频片段、程序等 - 由一个通过通 用资源标志符(Universal Resource Identifier, 简称”URI”)进行定位。URI一般由三部分组成:访问资源的命名机制。 存放资源的主机名。 资源自身的名称,由路径表示。 考虑下面的URI,它表示了当前的HTML 4.0规范: http://www.webmonkey转载 2007-07-18 10:49:00 · 1951 阅读 · 0 评论 -
可变参数学习笔记
前言:本文在很大程度上改编自网友kevintz的“C语言中可变参数的用法”一文,在行文之前先向这位前辈表示真诚的敬意和感谢。一、什么是可变参数我们在C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可转载 2007-05-10 15:02:00 · 1037 阅读 · 0 评论 -
gcc中格式化输出函数的研究
By 书生 ; 1.前言 在gcc编程中,我们比较经常用到的字符格式化输出函数是printf的,实际上gcc继承了c语言处理字符具有强大功能的风格,它提供了一系列的格式化输出函数,主要存在两个库函数文件stdio.h/ stdarg.h中,具体函数如下: #include printf, int printf(const char *format, ...);fprintf,转载 2007-05-10 16:01:00 · 1300 阅读 · 0 评论 -
#ifndef #define #endif的用法 整理:shichenghua
#ifndef#define#endif的用法转载 2007-05-10 14:35:00 · 10644 阅读 · 0 评论 -
linux-socket通信示例(传送文件)
服务器端代码:#include "creatSocket.h"#include #include #include #include #include #include #include #include #include #include //#include "error.h"#define BUFFSIZE 20extern int errno;main(){ int temp_so转载 2007-05-11 16:59:00 · 1572 阅读 · 0 评论 -
有效运用auto_ptr
翻译:elmar本文发表于1999年10月份的C/C++ Users Journal, 17(10)很多人听说过标准auto_ptr智能指针机制,但并不是每个人都天天使用它。这真是个遗憾,因为auto_ptr优雅地解决了C++设计和编码中 常见的问题,正确地使用它可以生成健壮的代码。本文阐述了如何正确运用auto_ptr来让你的代码更加安全——以及如何避免对auto_ptr危险但常 见的误转载 2007-05-12 10:39:00 · 1064 阅读 · 0 评论 -
Linux 设备驱动编程之阻塞与非阻塞
阻塞操作是指,在执行设备操作时,若不能获得资源,则进程挂起直到满足可操作的条件再进行操作。非阻塞操作的进程在不能进行设备操作时,并不挂起。被挂起的进程进入sleep状态,被从调度器的运行队列移走,直到等待的条件被满足。 在Linux驱动程序中,我们可以使用等待队列(wait queue)来实现阻塞操作。wait queue很早就作为一个基本的功能单位出现在 Linux转载 2007-05-12 14:41:00 · 1004 阅读 · 0 评论 -
在 C/C++中如何构造通用的对象链表
T. W. Burger (twburger@bigfoot.com), 老板, Thomas Wolfgang Burger Consulting 公司2000 年 9 月 01 日您是否做过这样一个项目,它要求您在内存中保存数目不定的若干不同对象?对于某些情况,二叉树是最佳选择,但在通常情况下,更简单的链表是显而易见的选择。 一个简化的问题示例 链表的难点在于必须复转载 2007-05-25 11:39:00 · 985 阅读 · 0 评论 -
根据结构体成员变量的地址,得到结构体的地址
我们在书写C程序的时候,有时候需要根据结构体成员变量的地址,得到结构体的地址,特别是我们想用C来实现C++的继承特性的时候。我们对问题的分析如下: 输入:一个结构体定义type,这个结构体中某个成员变量的名字member以及它的地址ptr 输出:包含此成员变量的结构体的地址 为了便于分析,我们给出一个实例来说明转载 2007-05-26 10:30:00 · 5956 阅读 · 0 评论 -
C定时器
#include #include #include char user[40]; //alarm 捕捉函数 void catch_alarm ( int sig_num) { printf ("Sorry,time limit reached. /n"); //清除定时器 alarm (0); exit (0转载 2007-05-29 14:06:00 · 3180 阅读 · 0 评论 -
静态变量
静态变量的类型说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。 对于自动变量,前面已经介绍它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。 由此看来, 一个变量可转载 2007-05-30 15:23:00 · 1695 阅读 · 0 评论 -
C链表重构
/*这次重写主要是为了增加结构的通用性、为了照顾初学的朋友我保*留原来的代码,那个看起来更容易被初学者理解.代码中的mian函数*只是简单的测试,大家可以根据需要自行修改.*/————————————————lis.h——————————————#ifndef LIST_H#define LIST_H /*定义函数状态*/#ifndef OK#define ERR转载 2007-05-31 14:06:00 · 1079 阅读 · 0 评论 -
sprintf 详细用法
在开始学习C 语言时接触到的第二个函数(我猜第一个是main),说起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf 了解多吗?在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比pri转载 2007-05-31 16:59:00 · 1601 阅读 · 0 评论 -
"extern" C的用法
链接指示符extern C如果程序员希望调用其他程序设计语言尤其是C 写的函数那么调用函数时必须告诉编译器使用不同的要求例如当这样的函数被调用时函数名或参数排列的顺序可能不同无论是C++函数调用它还是用其他语言写的函数调用它程序员用链接指示符linkage directive 告诉编译器该函数是用其他的程序设计语言编写的链接指示符有两种形式既可以是单一语句single statement 形式也转载 2007-06-05 18:47:00 · 874 阅读 · 0 评论