2011年7月29日

有关send(),recv()函数的理解

摘要: int send( SOCKET s, const char FAR *buf, int len, int flags );不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字描述符;第二个参数指明一个存放应用程序要发送数据的缓冲区;第三个参数指明实际要发送的数据的字节数;第四个参数一般置0。这里只描述同步Socket的send函数的执行流程。当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲的 长度, 如果len大于s的 阅读全文

posted @ 2011-07-29 13:46 艾杏佛 阅读(8821) 评论(2) 推荐(0) 编辑

2011年7月28日

gdb调试多线程程序总结

摘要: 先介绍一下GDB多线程调试的基本命令。 info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。 thread ID 切换当前调试的线程为指定ID的线程。 break thread_test.c:123 thread all在所有线程中相应的行上设置断点thread apply ID1 ID2 command 让一个或者多个线程执行GDB命令command。 thread apply all command 让所有被调试线程执行GDB命令command。 set scheduler-locking 阅读全文

posted @ 2011-07-28 19:11 艾杏佛 阅读(2428) 评论(0) 推荐(0) 编辑

2011年7月21日

UNIX 编程中错误输出的线程安全问题(转载)

摘要: 本文主要讲了使用errno,perror,strerr的一些函数进行错误输出管理的时候,在多线程的环境下有可能出现的混乱问题,并且针对线程安全,可重入和不可重入函数的关系进行了论述。出处:http://www.chineselinuxuniversity.net/articles/13685.shtml2008 年 6 月 26 日在多线程的 UNIX 应用程序中,系统调用出错时,错误输出有时可能不会像在单线程系统中那样正确的反应错误所在,因为需要考虑多线程情况下所使用的错误输出方式是否安全等问题。希望本文能对大家在多线程场景下选择错误报告的输出方式有所启发。 系统调用失败原因分析 在 UNI 阅读全文

posted @ 2011-07-21 13:34 艾杏佛 阅读(544) 评论(0) 推荐(0) 编辑

2011年7月13日

遵守多线程编程的常识

摘要: 准则6: 遵守多线程编程的常识要准确把握在POSIX标准的函数中,那些函数是非线程安全的,一定不要使用要让自己编写的函数符合线程安全在访问共享数据/变量之前一定要先锁定如果使用C++的话,一定要注意函数的同步方法说明: (1) 要准确把握那些非线程安全的函数,一定不要使用如果在POSIX平台上进行多线程编程时,有几个最基本的知识,也就是所说的“常识”,希望大家一定要严格遵守。...首先、我们要理解“线程安全”的意思。线程安全的函数就是指,“一个能被在多个线程同时调用也不会发生问题的函数”。这样的函数通常要满足以下几个的特质。不要操作局部的静态变量(函数内的static变量)和全局静态数据(全局 阅读全文

posted @ 2011-07-13 19:57 艾杏佛 阅读(411) 评论(0) 推荐(0) 编辑

自己写 localtime 函数(含完整注释,代码)转载

摘要: localtime()在多线程中使用的少的时候是不会出错的现localtime和ctime等函数在linux中的返回值均存放在一个静态区中,即TLS变量。如果在多线程程序中比较频繁的调用此函数,则可能出现内容错乱的情况。//曾在某平台下多线程中使用localtime库函数。可恶的是,每当程序运行//一段时间后,都要出现内存泄露。查了数个夜晚为什么,无从断定。//只能狠狠心,自己写了个localtimes,功能与localtime库函数相同。//有了它以后,我就不再因内存泄露而烦恼了。//要知道“内存泄露”是程序员大的一大耻辱。//这个localtimes在多线程下已经运行了3年,还没发生问题, 阅读全文

posted @ 2011-07-13 19:55 艾杏佛 阅读(1412) 评论(0) 推荐(0) 编辑

2011年6月26日

va_start va_end 的使用和原理

摘要: 1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表void foo(...);void foo(parm_list,...);2:函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:先介绍一下可变参数表的调用形式以及原理:首先是参数的内存存放格式:参数存放在内存的堆栈段中,在执行函数的时候,从最后一个开始入栈。因此栈底高地址,栈顶低地址,举个例子如下:void func(int x, float y, char z);那么,调用函数的时候,实参 char z 先进栈,然后是 float y,最后是 int x,因此在内存中变量的存放次序是 x->y 阅读全文

posted @ 2011-06-26 21:13 艾杏佛 阅读(294) 评论(0) 推荐(0) 编辑

2011年6月22日

uptime命令的用法详解

摘要: 导读:uptime命令可以显示系统已经运行了多长时间,信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。uptime命令用法十分简单:直接输入uptime即可.另外还有一个参数 -V ,是用来查询版本的。 (注意是大写的字母v)[linux @ localhost]$ uptime –Vprocps version 3.2.7[linux @ localhost]$ uptime显示结果为:10:19:04 up 257 days, 18:56, 12 users, load average: 2.10, 2.10,2.09 阅读全文

posted @ 2011-06-22 10:29 艾杏佛 阅读(2940) 评论(0) 推荐(0) 编辑

2011年6月13日

C语言中的sscanf用法(转载)

摘要: sscanf名称: sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: Int sscanf( string str, string fmt, mixed var1, mixed var2 ...); int scanf( const char *format [,argument]... ); 说明: sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。 其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' |'\t& 阅读全文

posted @ 2011-06-13 10:47 艾杏佛 阅读(634) 评论(0) 推荐(0) 编辑

2011年5月30日

Linux如何查看当前目录下文件的个数

摘要: 摘要:查看当前目录下文件的个数 ls -l | grep ^- | wc -l 查看当前目录下文件的个数,包括子目录里的。 ls -lR| grep ^- | wc -l 查看某目录下文件夹(目录)的个数,包括子目录里的。 ls -lR| grep ^d | wc -l 简要说明: ls -l 长列表输出该目录下文件信息(注意... 查看当前目录下文件的个数 ls -l | grep "^-" | wc -l 查看当前目录下文件的个数,包括子目录里的。 ls -lR| grep "^-" | wc -l 查看某目录下文件夹(目录)的个数,包括子目录里的。 阅读全文

posted @ 2011-05-30 21:21 艾杏佛 阅读(1125) 评论(0) 推荐(0) 编辑

2011年4月20日

SIZE_T AND SSIZE_T

摘要: size_t 是为了方便系统之间的移植而定义的在32位系统上 定义为 unsigned int在64位系统上 定义为 unsigned long更准确地说法是 在 32位系统上是32位无符号整形在 64位系统上是64位无符号整形size_t一般用来表示一种计数,比如有多少东西被拷贝等sizeof操作符的结果类型是size_t,该类型保证能容纳实现所建立的最大对象的字节大小。 它的意义大致是“适于计量内存中可容纳的数据项目个数的无符号整数类型”。所以,它在数组下标和内存管理函数之类的地方广泛使用。ssize_t:这个数据类型用来表示可以被执行读写操作的数据块的大小.它和size_t类似,但必需是 阅读全文

posted @ 2011-04-20 16:07 艾杏佛 阅读(197) 评论(0) 推荐(0) 编辑

导航