2012年9月29日

C语言学习笔记(二):define和typedef以及printf和scanf族函数

摘要: define和typedef预处理指令执行的仅仅是低级的记号替换,某些时候就会暴露出问题:#definechar*String;StringinputFileName;预处理程序把“#define”指令后面的文本中所以的记号“String”替换成“char*”,所以上面的代码可以工作。但如果写成:#definechar*String;StringintputFileName,OutputFileName;经过替换,上面的语句变成:char*inputFileName,OutputFileName;这就是#define的局限!typedef就没这个问题,因为typedef是由编译器进行语法分析的 阅读全文

posted @ 2012-09-29 15:09 Chris-Lin 阅读(387) 评论(0) 推荐(0) 编辑

C语言学习笔记(一):数组初始化的一种形式及C-V限定词

摘要: 数组:#include<stdio.h>intmain(){ inti,a[]={8,9,10,11,56,13,[0]=2,12,18,23,[1]=5,6}; for(i=0;i<sizeof(a)/sizeof(int);i++) printf("a[%d]=%d\n",i,a[i]); printf("length=%d\n",sizeof(a)/sizeof(int));}运行结果:(1)如果在一个指定初始化项目后跟有不止一个值,例如:[0]=2,12,18,23,则这些数值将用来对后续的数组元素初始化。即:[0]=2,则[1 阅读全文

posted @ 2012-09-29 14:55 Chris-Lin 阅读(194) 评论(0) 推荐(0) 编辑

2012年8月31日

Linux下Mysql增加用户,设置用户权限及修改密码的方法

摘要: 增加用户与设置用户权限:语句grantselect,insert,update,deleteon*.*touser1@”%”Identifiedby“123”表示增加一个用户user1密码为123,可在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。语句grantselect,insert,update,deleteondfg.*touser2@localhostidentifiedby“123”表示增加用户user2密码为123,只可以在localhost上登录,并可以对数据库dfg进行查询、插入、修改和删除的操作(localhost既mysql所在的主机)。语句grantcr 阅读全文

posted @ 2012-08-31 16:02 Chris-Lin 阅读(727) 评论(0) 推荐(0) 编辑

GDB学习笔记(一):GDB的常用命令(部分)

摘要: GDB主要用来调试C/C++程序。首先,编译时,需要把调试信息加到可执行文件中。可使用编译器的-g参数来实现这一点。如:gcc-g-ohellohello.c编译成功后,启动GDB进行调试。启动GDB的方法:1.gdb<program> program是编译后的可执行文件。2.gdb<program>PID PID为正在运行的程序进程号,可能根用户才有此权限3.先用gdb<program>运行,在GDB环境中用attach命令来挂接进程PID,用detach命令可取消挂接的程序启动GDB后,可用help查看GDB命令(gdb)helpListofclasse 阅读全文

posted @ 2012-08-31 16:00 Chris-Lin 阅读(301) 评论(0) 推荐(0) 编辑

2012年8月28日

C语言连接Mysql实例(一)

摘要: 首先先介绍以下代码会用到的Mysql C API(http://dev.mysql.com/doc/refman/5.1/zh/apis.html#c)(1)MYSQL *mysql_init(MYSQL *mysql)分配或初始化与mysql_real_connect()相适应的MYSQL对象。如果mysql是NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。如果mysql_init()分配了新的对象,当调用mysql_close()来关闭连接时。将释放该对象。返回值:初始化的MYSQL*句柄。如果无足够内存以分配新的对象,返回NULL。错误:在内存不足 阅读全文

posted @ 2012-08-28 22:13 Chris-Lin 阅读(7610) 评论(0) 推荐(0) 编辑

2012年8月25日

I/O多路复用(二):epoll模型详解

摘要: epoll的优点1.支持一个进程打开大数目的socket描述符(FD)select中一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是1024。在usr/include/linux/posix_types.h头文件有这样的声明:#define__FD_SETSIZE1024对于那些需要支持的上万连接数目的服务器来说显然太少了。这时候可以选择修改这个宏,但似乎治标不治本,二是可以选择多进程的解决方案,虽然linux上面创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据同步远比不上线程间同步的高效,所以也不是一种完美的方案。epoll则没有这个限制,它所支持的FD上限是 阅读全文

posted @ 2012-08-25 20:42 Chris-Lin 阅读(531) 评论(0) 推荐(0) 编辑

2012年8月23日

I/O多路复用(一):用select实现的多客户聊天的服务器

摘要: 以下例子为用select实现的多客户聊天的服务器,客户端成功连接服务器之后,可以和其他客户进行群聊。服务器代码:#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <strings.h>#include <arpa/inet.h>#include <string.h>#include <sys/ioctl.h>#include <fcntl.h>voi 阅读全文

posted @ 2012-08-23 20:57 Chris-Lin 阅读(562) 评论(0) 推荐(0) 编辑

2012年8月20日

用inetd装载应用程序

摘要: inetd是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。它可以为多种服务管理连接,当 inetd 接到连接时,它能够确定连接所需的程序,启动相应的进程,并把socket交给它 (服务 socket 会作为程序的标准输入、 输出和错误输出描述符)。使用 inetd 来运行那些负载不重的服务有助于降低系统负载,因为它不需要为每个服务都启动独立的服务程序。使用inetd可以减免编写连接代码的过程,而且基本上可以把处理程序当成普通程序来编写。下面先介绍inetd下的TCP服务器:首先,编写处理程序testd.c(这里用《TCP/IP高效编程 改善网络程序的44个技巧》 阅读全文

posted @ 2012-08-20 18:09 Chris-Lin 阅读(314) 评论(0) 推荐(0) 编辑

2012年8月19日

Linux下fcntl函数简单用法

摘要: #include <unistd.h> #include <fcntl.h>int fcntl(int fd , int cmd,...);fcntl()用来操作文件描述符的一些特性。针对cmd的值,fcntl能够接受第三个参数int argfcntl的返回值与命令有关。如果出错,所有命令都返回-1,如果成功则返回某个其他值。下列命令有特定返回值:F_DUPFD,F_GETFD,F_GETFL以及F_GETOWN。第一个返回新的文件描述符,第二、三个返回相应标志,最后一个返回一个正的进程ID或负的进程组ID。fcntl函数有5种功能:1.复制一个现有的描述符(F_DUP 阅读全文

posted @ 2012-08-19 17:59 Chris-Lin 阅读(1570) 评论(0) 推荐(1) 编辑

设置非阻塞socket及使connect调用超时

摘要: 一般TCP建立连接过程中需要“三次握手”。在socket阻塞的情况下,connect要花一个往返时间完成,从几毫秒到几百毫秒,如果网络拥塞,或者连接的主机还没启动,则要花费更长的时间,默认时间(典型值为75秒,也可能需要更长的时间)。可以通过将socket设置为非阻塞再用select来实现connect调用超时,步骤如下:1.创建socket2.设置socket为非阻塞3.利用connect()返回值判断connect的状态(此时connect不阻塞)4.利用select()返回值判断connect的状态void main(void){ int fd; int flags;... 阅读全文

posted @ 2012-08-19 17:33 Chris-Lin 阅读(1767) 评论(0) 推荐(0) 编辑

导航