07 2013 档案
stderr和stdout详细解说
摘要:今天又查了一下fprintf,其中对第一个参数stderr特别感兴趣。int fprintf(FILE *stream,char *format,[argument]);在此之前先区分一下:printf,sprintf,fprintf。1,printf就是标准输出,在屏幕上打印出一段字符串来。2,sprintf就是把格式化的数据写入到某个字符串中。返回值字符串的长度。3,fprintf是用于文件操作。 原型:int fprintf(FILE *stream,char *format,[argument]); 功能:fprintf()函数根据指定的format(格式)发送信息(参数)到由stre 阅读全文
posted @ 2013-07-21 14:46 hrbust_09zhangyabin 阅读(34675) 评论(0) 推荐(11)
127.0.0.1
摘要:127.0.0.1是一个循环IP地址。如果你往这个地址发信息,信息就会重新输送回你这里,这个地址没有被分配给任何人、组织。他只是一个试验地址。这个回送地址,翻译成汉语,就是“你自己”。 阅读全文
posted @ 2013-07-19 11:04 hrbust_09zhangyabin 阅读(242) 评论(0) 推荐(0)
详解select()函数---
摘要:以后看http://hi.baidu.com/bimufo/item/139700e4d880cba1c00d755c 阅读全文
posted @ 2013-07-18 22:20 hrbust_09zhangyabin 阅读(161) 评论(0) 推荐(0)
socket函数的使用方法(参数详解)
摘要:socket函数的使用方法如下:int socket(int domain, int type, int protocol); 在参数表中,domain指定使用何种的地址类型,比较常用的有: PF_INET, AF_INET: Ipv4网络协议; PF_INET6, AF_INET6: Ipv6网络协议。 type参数的作用是设置通信的协议类型,可能的取值如下所示: SOCK_STREAM: 提供面向连接的稳定数据传输,即TCP协议。 OOB: 在所有数据传送前必须使用connect()来建立连接状态。 SOCK_DGRAM: 使用不连续不可靠的数据包连接。 SOCK_SEQP... 阅读全文
posted @ 2013-07-18 15:43 hrbust_09zhangyabin 阅读(1502) 评论(0) 推荐(0)
问与答1
摘要:将socket设为非阻塞模式,然后用select进行I/O复用,如果有数据可读,那么就调用recv进行读取,但是因为是非阻塞的,所以我们要用循环 进行不断读取,那么如何知道数据读取完成了呢?我认为当recv返回的字节数小于0,errno==EAGAIN的时候数据读取完成,不知道对不对?? 阅读全文
posted @ 2013-07-17 23:50 hrbust_09zhangyabin 阅读(128) 评论(0) 推荐(0)
Socket 阻塞与非阻塞模式
摘要:http://blog.sina.com.cn/s/blog_5d0990c7010115ib.html 阅读全文
posted @ 2013-07-17 23:08 hrbust_09zhangyabin 阅读(138) 评论(0) 推荐(0)
TCP和UDP
摘要:TCP编程的服务器端一般步骤是:1、创建一个socket,用函数socket();2、绑定IP地址、端口等信息到socket上,用函数bind();3、开启监听,用函数listen();4、接收客户端上来的连接,用函数accept();5、收发数据,用函数send()和recv(),或者read()和write();6、关闭网络连接;7、关闭监听; TCP编程的客户端一般步骤是:1、创建一个socket,用函数socket();2、设置要连接的对方的IP地址和端口等属性;3、连接服务器,用函数connect();4、收发数据,用函数send()和recv(),或者read()和write(); 阅读全文
posted @ 2013-07-14 22:09 hrbust_09zhangyabin 阅读(179) 评论(0) 推荐(0)
琐碎知识
摘要:在c/c++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。全局存储区(静态存储区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 阅读全文
posted @ 2013-07-13 16:05 hrbust_09zhangyabin 阅读(237) 评论(0) 推荐(0)
malloc,alloc,realloc之间的相似与区别
摘要:三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(size_t numElements, size_t sizeOfElement); 都在stdlib.h函数库内。它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL。malloc与calloc的区别为1块与n块的区别: malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为“size”字节的连续区域,返回该区域的首地址。 calloc调用形式为(类型 阅读全文
posted @ 2013-07-13 15:27 hrbust_09zhangyabin 阅读(9135) 评论(1) 推荐(0)
linux多线程加解锁
摘要:1、动态方式使用互斥量,该类型的互斥量在定义时不进行初始化,需要在使用之前初始化,使用结束销毁 1.1、定义一个锁变量: pthread_mutex_t g_mutex_Msg; 1.2、初始化锁变量: pthread_mutex_init (&g_mutex_Msg,NULL); 1.3、销毁锁变量: pthread_mutex_destroy(&g_mutex_Msg); 1.4、加解锁: pthread_mutex_lock (&g_mutex_Msg); //需要被锁保护的对象的使用; pthread_mutex_unlock(&g_mutex_Msg) 阅读全文
posted @ 2013-07-08 20:58 hrbust_09zhangyabin 阅读(1589) 评论(0) 推荐(1)
pthread_create()
摘要:#include int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void), void *restrict arg);返回值若成功则返回0,否则返回出错编参数第一个参数为指向线程标识符的指针。第二个参数用来设置线程属性。 一般NULL第三个参数是线程运行函数的起始地址。最后一个参数是运行函数的参数 。一般NULL 阅读全文
posted @ 2013-07-08 13:28 hrbust_09zhangyabin 阅读(341) 评论(0) 推荐(0)
最简单的线程
摘要:#include#includevoid *print_thread_id(void *arg){ /* 打印当前线程的线程号*/ printf("Current thread id is %u\n", (unsigned)pthread_self());}int main(int argc, char *argv[]){ pthread_t thread; /*保存线程号*/ /*创建一个线程 */ pthread_create(&thread, NULL, print_thread_id, NULL); sleep(1); /*休眠1s*/ /*打印进程号 */ 阅读全文
posted @ 2013-07-08 13:13 hrbust_09zhangyabin 阅读(204) 评论(0) 推荐(0)
线程锁
摘要:pthread_mutex_init是对锁进行初始化,一个参数是锁结构体,一个是属性,属性基本为NULL就行。pthread_mutex_lock用来加锁,加锁后,别的线程运行到这个地方就不能继续运行了,等待解锁。pthread_mutex_unlock用来解锁。pthread_mutex_destroy用来销毁锁。 阅读全文
posted @ 2013-07-08 11:18 hrbust_09zhangyabin 阅读(216) 评论(0) 推荐(0)
解决错误---undefined reference to `pthread_create‘
摘要:今天试着敲了一下APUE的小例子,遇到了个错误 ----- undefined reference to `pthread_create。(为自己这么晚接触多线程惭愧)。上网上查了一下,借人经验。问题原因:pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数建立fork处理程序时,需要链接该库。问题解决: 在编译中要加 -lpthread参数 gcc 6.c -o 6 -lpthread 6.c为你些的源文件,不要忘了加上头文件#include 阅读全文
posted @ 2013-07-07 19:33 hrbust_09zhangyabin 阅读(291) 评论(0) 推荐(0)
多进程小例子--fork+pipe
摘要:1 #include 2 #include 3 4 #define m 6 5 int main() 6 { 7 int pipefd[2]; 8 int pid; 9 int m1;10 11 if(pipe(pipefd)0) //parent18 {19 m1=m;20 close(pipefd[0]); //close read end21 write(pipefd[1],&m1,sizeof(int)); //read m122 wait(NULL); // wait for child complete23 close(pipefd[1]);24 }25 else if(p 阅读全文
posted @ 2013-07-06 23:21 hrbust_09zhangyabin 阅读(271) 评论(0) 推荐(0)