上一页 1 2 3 4 5 6 7 ··· 9 下一页
摘要: 1、不使用库函数实现strcpy#includechar*strcpy(char*dst,constchar*src){ assert((dst!=NULL)&&(src!=NULL)); char*tmp=dst; while((*dst++=*src++)!='\0') { /*nothing*/; } returntmp;}需要注意几个方面的问题:1、注意编程风格。比如,使用dst、src这样增强可读性的名字。2、使用断言assert来检验输入参数的有效性。 assert宏的原型定义在中,其作用是如果它的条件返回false,则终止程序执行。可以在任何时候启 阅读全文
posted @ 2013-11-17 18:16 天天向上... 阅读(2647) 评论(0) 推荐(0) 编辑
摘要: atoi的实现:#includeusingnamespacestd;intatio1(char*s){intsign=1,num=0;if(*s=='-')sign=-1;s++;while((*s)!='\0'){num=num*10+(*s-'0');s++;}returnnum*sign;}itoa的实现:法1:voiditoa(intvalue,char*str){if(value0;i++,value/=10) //从value[1]开始存放value,不过是逆序 str[i]=value%10+'0'; //将数字加上 阅读全文
posted @ 2013-11-17 11:47 天天向上... 阅读(407) 评论(0) 推荐(0) 编辑
摘要: C结构体之位域(位段)http://www.cnblogs.com/bigrabbit/archive/2012/09/20/2695543.html有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与 阅读全文
posted @ 2013-11-16 21:48 天天向上... 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 转自:http://blog.chinaunix.net/uid-20672257-id-1901041.html1、系统调用和库函数的关系系统调用通过软中断int 0x80从用户态进入内核态。函数库中的某些函数调用了系统调用。函数库中的函数可以没有调用系统调用,也可以调用多个系统调用。编程人员可以通过函数库调用系统调用。高级编程也可以直接采用int 0x80进入系统调用,而不必通过函数库作为中介。如果是在核心编程,也可以通过int 0x80进入系统调用,此时不能使用函数库。因为函数库中的函数是内核访问不到的。2、从用户调用库函数到系统调用执行的流程。1)假设用户调用ssize_t write 阅读全文
posted @ 2013-11-16 19:02 天天向上... 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 1、typedef int (init_fnc_t) (void);表示定义init_fnc_t为函数类型,该函数返回int型,无参数。而“init_fnc_t *init_sequence[]={cpu_init, board_init }”表示用init_fnc_t(函数类型)去定义一个一维指针数组,数组中的元素都是指针变量,而且都是指向函数的指针,这些函数返回值都是int型,无参数的。更明朗的说就是数组中的每个元素是用来存放函数入口首地址的。2、int (*init_fnc_t) (void);表示定义一个函数指针(返回值为int型,无参数的函数指针,存放的是函数的首地址),typede 阅读全文
posted @ 2013-11-16 18:15 天天向上... 阅读(424) 评论(0) 推荐(0) 编辑
摘要: 源地址:http://blog.csdn.net/jnu_simba/article/details/9070955一、五种I/O模型1、阻塞I/O我们在前面所说的I/O模型都是阻塞I/O,即调用recv系统调用,如果没有数据则阻塞等待,当数据到来则将数据从内核空间(套接口缓冲区)拷贝到用户空间(recv函数提供的buf),然后recv返回,进行数据处理。2、非阻塞I/O 我们可以使用 fcntl(fd, F_SETFL, flag | O_NONBLOCK); 将套接字标志变成非阻塞,调用recv,如果设备暂时没有数据可读就返回-1,同时置errno为EWOULDBLOCK(或者EAGAIN 阅读全文
posted @ 2013-11-14 17:57 天天向上... 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 源地址:http://blog.csdn.net/zi_jin/article/details/4214359Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以 阅读全文
posted @ 2013-11-14 17:54 天天向上... 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 源地址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html之前写过一篇博客:用 Fiddler来调试HTTP,HTTPS。 这篇文章介绍另一个好用的抓包工具wireshark,用来获取网络数据封包,包括http,TCP,UDP,等网络协议包。记得大学的时候就学习过TCP的三次握手协议,那时候只是知道,虽然在书上看过很多TCP和UDP的资料,但是从来没有真正见过这些数据包, 老是感觉在云上飘一样,学得不踏实。有了wireshark就能截获这些网络数据包,可以清晰的看到数据包中的每一个字段。更能加深我们对网络协议的理解。 阅读全文
posted @ 2013-11-13 17:39 天天向上... 阅读(258) 评论(0) 推荐(0) 编辑
摘要: Linux 多线程通信2008-03-13 11:0119764人阅读评论(0)收藏举报linux多线程threadjoinwindows编程摘自资料(linux 与Windows不同) 线程间无需特别的手段进行通信,因为线程间可以共享数据结构,也就是一个全局变量可以被两个线程同时使用。不过要注意的是线程间需要做好同步,一般用mutex。可以参考一些比较新的UNIX/Linux编程的书,都会提到Posix线程编程,比如《UNIX环境高级编程(第二版)》、《UNIX系统编程》等等。 linux的消息属于IPC,也就是进程间通信,线程用不上。linux用pthread_kill对线程发信号。 另: 阅读全文
posted @ 2013-11-13 15:43 天天向上... 阅读(1311) 评论(0) 推荐(0) 编辑
摘要: Linux下c开发 之 线程通信1.Linux“线程”进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型。Linux是一种“多进程单线程”的操作系统。Linux本身只有进程的概念,而其所谓的“线程”本质上在内核里仍然是进程。大家知道,进程是资源分配的单位,同一进程中的多个线程共享该进程的资源(如作为共享内存的全局变量)。Linux中所谓的“线程”只是在被创建时clone了父进程的资源,因此clone出来的进程表现为“线程”,这一点一定要弄清楚。因此,Linux“线程”这个概念只有在打冒号的情况下才是最准确的。目前Linux中最流行的线程机制为LinuxThrea 阅读全文
posted @ 2013-11-13 15:42 天天向上... 阅读(357) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 9 下一页