随笔分类 -  C

IO复用: select 和poll 到epoll
摘要:linux 提供了select、poll和epoll三种接口来实现多路IO复用。下面总结下这三种接口。 select 该函数允许进程指示内核等待多个事件中的任何一个发生,并只在有一个或多个事件发生或经历一段指定的时间后才唤醒它。 函数接口: 1: #include 2: #include 3: 4: int select(i... 阅读全文
posted @ 2013-09-10 18:27 @且听风吟@ 阅读(482) 评论(0) 推荐(0)
fork和vfork的区别
摘要:参见百度百科API说明: fork 头文件: #include #include 函数原型: pid_t fork( void); (pid_t 是一个宏定义,其实质是int 被定义在#include中) 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1 函数说明: 一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进... 阅读全文
posted @ 2013-09-08 08:33 @且听风吟@ 阅读(8577) 评论(1) 推荐(1)
linux的锁比较
摘要:spinlock spinlock介绍 spinlock又称自旋锁,线程通过busy-wait-loop的方式来获取锁,任时刻只有一个线程能够获得锁,其他线程忙等待直到获得锁。spinlock在多处理器多线程环境的场景中有很广泛的使用,一般要求使用spinlock的临界区尽量简短,这样获取的锁可以尽快释放,以满足其他忙等的线程。Spinlock和mutex不同,spinlock不会导致线... 阅读全文
posted @ 2013-09-06 12:58 @且听风吟@ 阅读(756) 评论(0) 推荐(0)
linux 下的多线程编程
摘要:Linux 下POSIX线程 使用threadid标识一个线程。 创建线程的函数如下: 1: #include 2: 3: int pthread_create( 4: pthread_t *restrict tidp, 5: const pthread_attr_t *restric... 阅读全文
posted @ 2013-08-29 09:29 @且听风吟@ 阅读(257) 评论(0) 推荐(0)
strcmp 的坑
摘要:根据百度百科的:http://baike.baidu.com/view/1026924.htm 函数简介 原型:extern int strcmp(const char *s1,const char * s2); 所在头文件:string.h 功能:比较字符串s1和s2。 一般形式:strcmp(字符串1,字符串2) 说明: 当s1s2时,返回值 = 1 注:c++ 中 当s1s... 阅读全文
posted @ 2013-08-16 22:03 @且听风吟@ 阅读(328) 评论(0) 推荐(0)
linux socket编程client获取使用的ip和port
摘要:今天为了测试机器绑定多ip时socket client使用的ip和port,因此查询资料看了下如何获取client的ip和port(系统自选而不是bind绑定)主要是对连接的描述符通过getsockname 函数获取client的地址信息,函数说明如下#include <sys/socket.h> int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen); int getpeername(int sockfd, struct sockaddr *peeraddr, socklen_t *a 阅读全文
posted @ 2013-01-25 16:46 @且听风吟@ 阅读(8180) 评论(0) 推荐(0)
获取机器的IP信息
摘要:linux 获取机器多个ip 阅读全文
posted @ 2013-01-24 16:37 @且听风吟@ 阅读(405) 评论(0) 推荐(0)
linux mkdir函数使用注意
摘要:linux的mkdir 函数原型如下:int mkdir(const char *pathname, mode_t mode);今天使用linux的mkdir创建目录。函数说明: mkdir()函数以mode方式创建一个以参数pathname命名的目录,mode定义新创建目录的权限。返回值:若目录创建成功,则返回0;否则返回-1,并将错误记录到全局变量errno中。mode方式: S_IRWXU00700权限,代表该文件所有者拥有读,写和执行操作的权限S_IRUSR(S_IREAD)00400权限,代表该文件所有者拥有可读的权限S_IWUSR(S_IWRITE)00200权限,代表该文件所有者 阅读全文
posted @ 2012-05-15 17:08 @且听风吟@ 阅读(11080) 评论(0) 推荐(0)
[转载]C++编译器与链接器工作原理
摘要:[转自:http://blog.csdn.net/success041000/article/details/6714195]1.几个概念 1)编译:把源文件中的源代码翻译成机器语言,保存到目标文件中。如果编译通过,就会把CPP转换成OBJ文件。 2)编译单元:根据C++标准,每一个CPP文件就是一个编译单元。每个编译单元之间是相互独立并且互相不可知。 3)目标文件:编译所生成的文件,以机器码的形式包含了编译单元里所有的代码和数据。 还有一些其他信息,如未解决符号表,导出符号表和地址重定向表等。目标文件是以二进制的形式存在的。 根据C++标准,一个编译单元(Translation Un... 阅读全文
posted @ 2012-04-25 19:23 @且听风吟@ 阅读(272) 评论(0) 推荐(0)
[转载]描述C,C++编译和链接过程
摘要:[转载自http://my.oschina.net/anyway/blog/11262]详解link有 些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错误信息不能定位到某一行)。或者对语言的一些部分不知道为什么要(或者不要)这样那样设计。了解本文之后, 或许会有一些答案。 首先看看我们是如何写一个程序的。如果你在使用某种IDE(Visual Studio,Elicpse,Dev C++等),你可能不会发现程序是如何组织起来的(很多人因此而反对初学者使用IDE)。因 阅读全文
posted @ 2012-04-25 19:15 @且听风吟@ 阅读(265) 评论(0) 推荐(0)
内存分配函数
摘要:malloc函数简介 原型:extern void *malloc(unsigned int num_bytes); 语法:num_bytes为内存块的字节数 头文件:在TC2.0中可以用malloc.h或 alloc.h (注意:alloc.h 与 malloc.h 的内容是完全一致的),而在Visual C++6.0中可以用malloc.h或者stdlib.h。 功能:分配长度为num_bytes字节的内存块 返回值:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐 阅读全文
posted @ 2012-04-23 14:15 @且听风吟@ 阅读(352) 评论(0) 推荐(0)
堆和栈
摘要:一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放5、程序 阅读全文
posted @ 2012-04-17 16:02 @且听风吟@ 阅读(337) 评论(1) 推荐(1)
makefile 学习
摘要:【转载,非常不错的一篇博文,循序渐进,简单易懂】假设我们有下面这样的一个程序,源代码如下:/* main.c */#include <mytool1.h>#include <mytool2.h>int main(int argc,char **argv){mytool1_print("hello");mytool2_print("hello");}/* mytool1.h */#ifndef _MYTOOL_1_H#define _MYTOOL_1_Hvoid mytool1_print(char *print_str);#end 阅读全文
posted @ 2012-04-09 18:08 @且听风吟@ 阅读(267) 评论(0) 推荐(0)