2013年12月26日

函数返回 局部变量问题

摘要: #include#includechar*get_str(void){char*str="abcd";returnstr;}intmain(intargc,char*argv[]){char*p=get_str();printf("%s/n",p);return0;}上述代码中,str是局部变量,函数返回后应该释放掉了,但为什么get_str返回后,还能正常输出呢?char *str="abcd"; 这种方式内存分配在静态存储区,str指向"abcd"这一字符串常量,get_str()函数返回指向这一字符串常量的地 阅读全文

posted @ 2013-12-26 10:52 google_yep 阅读(375) 评论(0) 推荐(0) 编辑

2013年12月25日

几种网络I/O模型

摘要: 网络I/O模型有几种?window 下的套接字以来两种方式执行I/O操作,阻塞IO 非阻塞IO,一般默认使用的是阻塞IO 即线程会等待不会把控制权利立刻返回给程序,这就意为一个线程在某一个时候只能够去执行一个IO操作。如果服务端想和多个客户端同时进行通信的话就要使用多线程编程,但是会增加开销,如果采用非阻塞IO程序不会等待,会立刻返回结果但是在大部分情况下返回的结果是错误的,并返回一个WSAEWOULDBLOCK的错误,所以程序员要不断的检测函数返回的代码以判断一个套接字何时可供读写。为了避免麻烦winsock 提供了不同的套接字模型对IO进行管理select (),WSAAsyncSelec 阅读全文

posted @ 2013-12-25 17:01 google_yep 阅读(4796) 评论(0) 推荐(0) 编辑

2013年9月28日

socket的select模型【摘】

摘要: 套接字select模型是一种比较常用的IO模型。利用该模型可以使Windowssocket应用程序可以同时管理多个套接字。 使用select模型,可以使当执行操作的套接字满足可读可写条件时,给应用程序发送通知。收到这个通知后,应用程序再去调用相应的WindowssocketAPI去执行函数调用。 Select模型的核心是select函数。调用select函数检查当前各个套接字的状态。根据函数的返回值判断套接字的可读可写性。然后调用相应的WindowsSocketsAPI完成数据的发送、接收等。 利用select函数实现IO管理。通过对select函数的调用,应用程序可以判断套接字... 阅读全文

posted @ 2013-09-28 16:51 google_yep 阅读(449) 评论(0) 推荐(0) 编辑

2013年9月27日

Linux Bash Shell入门教程【转载】

摘要: BASH 的基本语法最简单的例子 —— Hello World!关于输入、输出和错误输出BASH 中对变量的规定(与 C 语言的异同)BASH 中的基本流程控制语法函数的使用2.1 最简单的例子 —— Hello World!几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BASH。用 vi 编辑器编辑一个 hello 文件如下:#!/bin/bash# This is a very simple exampleecho Hello World这样最简单的一个 BASH 程序就编写完了。这里有几个问题需要说明一下:一,第一 阅读全文

posted @ 2013-09-27 15:03 google_yep 阅读(249) 评论(0) 推荐(0) 编辑

2013年9月18日

Shell学习【转】

摘要: Linux主要shell命令详解作者:北南南北 2005-02-03 15:43:30 来自:Linux先生shell是用户和Linux操作系统之间的接口。Linux中有多种shell,其中缺省使用的是Bash。本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特性。 什么是shellLinux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传 阅读全文

posted @ 2013-09-18 17:17 google_yep 阅读(231) 评论(0) 推荐(0) 编辑

2013年9月16日

unicode 2 utf8 [转]

摘要: Unicode和UTF-8之间的转换详解 通过这几天的研究,终于明白了Unicode和UTF-8之间编码的区别。Unicode是一个字符集,而UTF-8 是Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的,对于汉字来说Unicode占有的字节比UTF-8占用的字节少1个字节。Unicode为双字节,而UTF-8中汉字占三个字节。 网魂小兵http://xdotnet.cnblogs.comUTF-8编码字符理论上可以最多到6个字节长,然而16位BMP(Basic Multilingual Plane)字符最多 只用到3字节长。下面看一下UTF-8编码表... 阅读全文

posted @ 2013-09-16 14:10 google_yep 阅读(393) 评论(0) 推荐(0) 编辑

2013年8月22日

linux下多线程的创建与等待详解 【转载】

摘要: linux下多线程的创建与等待详解http://blog.chinaunix.net/uid-23842323-id-2656572.html所有线程都有一个线程号,也就是Thread ID。其类型为pthread_t。通过调用pthread_self()函数可以获得自身的线程号。下面说一下如何创建一个线程。通过创建线程,线程将会执行一个线程函数,该线程格式必须按照下面来声明:void * Thread_Function(void *)创建线程的函数如下:intpthread_create(pthread_t*restrict thread,constpthread_attr_t*restri 阅读全文

posted @ 2013-08-22 14:31 google_yep 阅读(358) 评论(0) 推荐(0) 编辑

2013年6月27日

运算(93&-8)的结果

摘要: 运算(93&-8)的结果93 : 0x005D 0000 0000 0101 1101-8 : 0xFFF8 1111 1111 1111 1000----------------------------------------88 0x0058 0000 0000 0101 1000 //负数的计算:1、先算正数的二进制 0x1000 // 2、计算正数的反码 0x0111 // 3、反码+1 即负数 0x1000 阅读全文

posted @ 2013-06-27 16:49 google_yep 阅读(1095) 评论(0) 推荐(0) 编辑

一道腾讯的面试题,关于a和&a

摘要: int a[5]={1,2,3,4,5};int *ptr=(int*)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));输出:2,5解析:a作为一个数组名,它本身就是一个指针,a指向数组首地址,a+1指向a[1]地址 a加上& 它就变成了双指针,可以理解为一个二维数组,&a+1就表示数组加一行,就指到了a[6]了类似的:int a[2][2][3]= {{{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}}}; int *ptr=(int *)(&a+1); printf("%d 阅读全文

posted @ 2013-06-27 16:37 google_yep 阅读(352) 评论(0) 推荐(0) 编辑

2013年6月26日

传值和传引用、传地址的区别

摘要: 传值, 是把实参的值赋值给形参 那么对形参的修改,不影响实参的值 传地址 是传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和形参都指向同一个对象 传引用 真正的以地址的方式传递参数 传递以后,形参和实参都是同一个对象,只是他们名字不同而已 对形参的修改将影响实参的值-----------------------------------------------------------------------------------觉得从函数调用的角度理解比较好 传值: 函数参数压栈的是参数的副本。 任何的修改是在副本上作用,没有作用在原来的变量上。 传指... 阅读全文

posted @ 2013-06-26 10:26 google_yep 阅读(2891) 评论(0) 推荐(0) 编辑

导航