- 博客(40)
- 资源 (1)
- 收藏
- 关注
转载 sprintf 详细用法
在开始学习C 语言时接触到的第二个函数(我猜第一个是main),说起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf 了解多吗?在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比pri
2007-05-31 16:59:00 1558
转载 C链表重构
/*这次重写主要是为了增加结构的通用性、为了照顾初学的朋友我保*留原来的代码,那个看起来更容易被初学者理解.代码中的mian函数*只是简单的测试,大家可以根据需要自行修改.*/————————————————lis.h——————————————#ifndef LIST_H#define LIST_H /*定义函数状态*/#ifndef OK#define ERR
2007-05-31 14:06:00 1065
转载 静态变量
静态变量的类型说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。 对于自动变量,前面已经介绍它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。 由此看来, 一个变量可
2007-05-30 15:23:00 1640
转载 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 3162
转载 根据结构体成员变量的地址,得到结构体的地址
我们在书写C程序的时候,有时候需要根据结构体成员变量的地址,得到结构体的地址,特别是我们想用C来实现C++的继承特性的时候。我们对问题的分析如下: 输入:一个结构体定义type,这个结构体中某个成员变量的名字member以及它的地址ptr 输出:包含此成员变量的结构体的地址 为了便于分析,我们给出一个实例来说明
2007-05-26 10:30:00 5848
转载 在 C/C++中如何构造通用的对象链表
T. W. Burger (twburger@bigfoot.com), 老板, Thomas Wolfgang Burger Consulting 公司2000 年 9 月 01 日您是否做过这样一个项目,它要求您在内存中保存数目不定的若干不同对象?对于某些情况,二叉树是最佳选择,但在通常情况下,更简单的链表是显而易见的选择。 一个简化的问题示例 链表的难点在于必须复
2007-05-25 11:39:00 965
转载 Linux下面究竟什么是symbolic link, 怎样创建一个symbolic link
A symbolic link, also termed a soft link, is a special kind of file that points to another file, much like a shortcut in Windows or a Macintosh alias. Unlike a hard link, a symbolic link does not co
2007-05-24 17:19:00 4339 1
转载 深入理解Linux守护进程
Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由 运行在后台的守护进程(daemons)来执行的。守护进程是生存期长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事 件。他们常常在系统引导装入时启动,在系统关闭时终止。linux系统有很多守护进程,大多数服务器都是用守护进程
2007-05-23 11:13:00 952
转载 守护进程XINETD与SOCKET 程序
1.xinetd提供被动式的超级服务,也就是服务程序是被使用端所启动,平时则无须存在。例如,ftp, telnetd, pop3,imap, auth等等,这些服务没有人使用时,无须启动。此外,xinetd将socket转换成stdin/stdout,因而使得网路服务程式设计大大简化, 您可以只用printf及fgets便可完成处理很复杂的网路协定。 2.一个简单的服务程序 goodie
2007-05-23 10:45:00 764
转载 xinetd使用指南(转)
redhat7.0以后inetd都已换成xinetd了--好用了很多。先看一下 /etc/xinetd.conf--instances最大实例数--如果你用的是wu-ftpd-最大人数60那就改这个了。注意最后一句 includedir其实是把telnet,wu-ftpd等脚本包含到此文件中的--直接写在这也行。 defaults { instances = 60 log_type = SYSL
2007-05-23 10:27:00 698
转载 Wrapper和xinetd的实现
第一节 概述 RedHat 7.2 的系统服务存取控制机制主要有两种:一种是以ipchains或iptables为具体实现的firewall机制,另一种是以TCP Wrapper为具体实现的xinetd机制。本文档主要论述后一种机制的具体实现。 1 关于TCP Wrapper 象Telnet、SSH、FTP、POP和SMTP等很多网络服务都会用到TCP Wrapper,它被设计为一
2007-05-23 10:13:00 718
转载 Linux下各类TCP网络服务器的实现源代码
Linux下各类TCP网络服务器的实现源代码大家都知道各类网络服务器程序的编写步骤,并且都知道网络服务器就两大类:循环服务和并发服务。这里附上源代码来个小结吧。首先,循环网络服务器编程实现的步骤是这样的: 建立socket(这里用到socket()函数及函数setsockopt())
2007-05-23 09:19:00 1254
转载 linux C函数库参考
第1章 字符测试函数isalnum(测试字符是否为英文字母或数字)isalpha(测试字符是否为英文字母)isascii(测试字符是否为ASCII码字符)isblank(测试字符是否为空格字符)iscntrl(测试字符是否为ASCII码的控制字符)isdigit(测试字符是否为阿拉伯数字)isgraph(测试字符是否为可打印字符)islower(测试字符是否为小写英文字母)isprint(测试字
2007-05-22 14:31:00 2161
转载 Unix操作系统并发进程数的控制
Unix 操作系统常用于Client/Server结构中的Server(服务器端),在服务器端编程中,我们一般采用并发多进程的方式来接收处理Client (客户端)的服务请求。我们知道,在系统资源(CPU、内存、硬盘等)一定的情况下,系统所能负担的进程数量是有限的,如果超过这个限制,系统就会紊乱甚 至崩溃。通讯超时过长、某种业务处理太慢,都会引起短时间内系统并发进程数的骤然增加,导致系统运行不稳定
2007-05-22 09:19:00 1708
转载 TCP/IP网络重复型服务器通信软件设计
摘要:本文介绍一种新型的基于消息队列的重复型服务器通信软件的设计方法,不同于并发型服务器和一般的重复型服务器通信软件,这种新的软件具有生成的子进 程数少的优点,并且容易对客户机与服务器的连接进行管理,适用于客户机数量较多和随机数据通信的情况,能够有效地提高服务器的运行效率。 关键词:TCP/IP网络 重复型服务器通信软件 套接字 连接 共享内存 消息队列 并发服务器与重复服务器的区别 一般
2007-05-21 15:53:00 1391
转载 ftok函数
系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。ftok原型如下:key_t ftok( char * fname, int id )fname就时你指定的文件名,id是子序号。在一般的UNIX实现中,是将文件的索引节点号取出,前面加上子序号得到key_t的返回值。如指定文件的索引节点号为65538,换算成16进制为0x010002,而
2007-05-17 16:53:00 30653 2
转载 进程间通信和同步
第二章 进程间通信和同步前言:在linux/unix中支持多种进程间通信(IPC)的方式,主要包括:信号、信号量、消息队列和共享内存,管道(包括无名管道和FIFO)也是进程间通信的方式。 ·2,2信号的捕获和处理:#inlucde //参见POSIX.1中定义相关函数:sigaction(int signo, const struct sigaction *act,
2007-05-16 21:26:00 6287
转载 关于linux 僵尸进程
僵尸进程是指的父进程已经退出,而该进程dead之后没有进程接受,就成为僵尸进程.(zombie)进程 怎样产生僵尸进程的: 一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用 exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。 在Linux进程的状态中
2007-05-16 21:10:00 11728
转载 LINUX 下多进程调试方法
#include stdio.h> #include unistd.h>int main() ...{ if(fork() == 0) ...{ printf("Child Process say hello to you! "); sleep(5); exit(0);
2007-05-16 21:08:00 1829
转载 Unix Daemon Server Programming
Unix Daemon Server ProgrammingIntroductionUnix processes works either in foreground or background. A process running in foreground interacts with the user in front of the terminal (makes I/O), w
2007-05-16 20:52:00 1257
转载 Linux下进程间管道通信小作业
/*说明:一次作业,目的是了解Linux下进程和进程间通过管道通信* 没考虑复杂算法和其他一些可能出现的问题*功能:统计2个文本文件的字数和,2个参数分别为两文件名*描述:父进程启动,开启子进程,子进程统计一个文本的字数,* 待子进程结束,父进程统计另一个,在父进程中计算和打印统计结果*/#include unistd.h>#include stdio.h>#incl
2007-05-16 20:49:00 783
转载 linux环境进程间通信:共享内存
采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内 核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共 享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通信
2007-05-16 20:38:00 803
转载 CLOSE_WAIT问题解决
CLOSE_WAIT问题终于解决了。首先我要多谢tonykorn97,他的Blog: http://tonykorn97.itpub.net/index.php一篇对我非常有用的文章!(我在下面引用了过来。)from : http://tonykorn97.itpub.net/index.php下面就说说我是怎么解决的吧:[oracle9i@RHEL3 oracle9i]$ /usr/s
2007-05-16 11:14:00 16013
转载 尴尬的CLOSE_WAIT状态以及应对策略
摘要:本文阐述了为何socket连接锁定在CLOSE_WAIT状态,以及通过什么措施力求避免这种情况。 不久前,我的Socket Client程序遇到了一个非常尴尬的错误。它本来应该在一个socket长连接上持续不断地向服务器发送数据,如果socket连接断开,那么程序会自动不断地重试建立连接。有一天发现程序在不断尝试建立连接,但是总是失败。用netstat查看,这个程序竟然有上
2007-05-16 10:58:00 9772
转载 Linux 设备驱动编程之阻塞与非阻塞
阻塞操作是指,在执行设备操作时,若不能获得资源,则进程挂起直到满足可操作的条件再进行操作。非阻塞操作的进程在不能进行设备操作时,并不挂起。被挂起的进程进入sleep状态,被从调度器的运行队列移走,直到等待的条件被满足。 在Linux驱动程序中,我们可以使用等待队列(wait queue)来实现阻塞操作。wait queue很早就作为一个基本的功能单位出现在 Linux
2007-05-12 14:41:00 987
转载 有效运用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 1048
转载 Clustering经典范文学习
function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://www.365key.com/storeit.
2007-05-12 10:25:00 804
转载 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 1550
转载 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 1268
转载 可变参数学习笔记
前言:本文在很大程度上改编自网友kevintz的“C语言中可变参数的用法”一文,在行文之前先向这位前辈表示真诚的敬意和感谢。一、什么是可变参数我们在C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可
2007-05-10 15:02:00 1016
转载 socket编程:SO_REUSEADDR例解
kevintz 2000-6-19 网友vmstat多次提出了这个问题:SO_REUSEADDR有什么用处和怎么使用。而且很多网友在编写网络程序时也会遇到这个问题。所以特意写了这么一篇文章,希望能够解答一些人的疑难。 其实这个问题在Richard Stevens的《Unix网络编程指南》卷一里有很详细的解答
2007-05-10 09:44:00 1677
转载 Linux 有用的命令之 - lsof
LSOF是针对Unix的诊断和分析工具,它能显示出由系统里正在运行的进程所打开的文件,也能显示出每一个进程的通讯socket。Contents * 查看对某个文件的使用情况 * 查看对文件系统的使用 o 查找打开,但是不能连接的文件 * 无法卸载 * 查看监听socket * 查看某个网络连接 * 识别 Netstat 连接 * 查找
2007-05-09 17:00:00 682
转载 开发 Linux 后台服务进程
Linux Deamon编程方法 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。 比如,作业规划进程crond,打印进程lpd等。 守护
2007-05-09 16:19:00 1317
转载 Linux程序设计——用getopt处理命令行参数
Linux下很多程序甚至那些具有图形用户界面(graphical user interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与用户进行交互的主要手段。具有可靠的复杂命令行参数处理机制,会使得您的应用程序更好、更有用。getopt()是一个专门设计来减轻命令行处理负担的库函数。1、命令行参数命令行程序设计的首要任务是解析命令行参数,GUI派的程序员很少关
2007-05-09 15:07:00 738
转载 声明函数指针并实现回调
程序员常常需要实现回调。本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调。注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数(类成员指针将在另文中讨论)。声明函数指针 回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用。要实现回调,必须首先定义函数指针。尽管定义的语法有点不可思议,但如果你熟悉函数声明的一般方法,便会发现函数指
2007-05-08 14:18:00 1120
转载 calloc(), malloc(), realloc(), free()
void *calloc(size_t nobj, size_t size);分配足够的内存给nobj个大小为size的对象组成的数组, 并返回指向所分配区域的第一个字节的指针;若内存不够,则返回NULL. 该空间的初始化大小为0字节.char *p = (char *) calloc(100, sizeof(char));void *malloc(size_t size);分配足
2007-05-08 10:01:00 904
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人