导航

上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 37 下一页

2012年4月13日

摘要: 我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译成.o文件。第1步:编辑得到举例的程序--hello.h、hello.c和main.c;hello.c(见程序2)是函数库的源程序,其中包含公用函数hello,该函数将在屏幕上输出"Hello 阅读全文

posted @ 2012-04-13 22:30 网名还没想好 阅读(6453) 评论(1) 推荐(0) 编辑

2012年4月11日

摘要: 首先#include <errno.h> 然后就能用errno这个全局变量了。函数strerror获取系统错误信息或打印用户程序错误信息。如:printf("错误号:%d,错误信息%s\n“,errno,strerror(errno));OK. 阅读全文

posted @ 2012-04-11 16:18 网名还没想好 阅读(786) 评论(0) 推荐(1) 编辑

摘要: Socket中的send函数可以发送字符串,但不能直接发送结构体,因此在发送端先把结构体转成字符串,然后用send发送,在接收端recv字符串,再转换成原先的结构体,这个就是解决问题的主要思路,实现中要注意的问题在下文阐述。 为了客户端之间能够互相通信,实现私聊,我采用服务器转发的方式,因此用户发送的每条消息中除了消息主体外,还必须包含有发送者、接收者ID等信息,如此采用结构体便是最佳的办法了。我定义的结构体如下:struct send_info{char info_from[20]; //发送者IDchar info_to[20]; //接收者IDint info_length; //发送. 阅读全文

posted @ 2012-04-11 15:56 网名还没想好 阅读(2131) 评论(0) 推荐(0) 编辑

2012年4月9日

摘要: 服务器端: #include<stdio.h> #include<stdlib.h> #include<sys/socket.h> #include<arpa/inet.h> #include<string.h> #include<errno.h> #include<unistd.h> #define BUFSIZE 1024 int main(void) { struct sockaddr_in local_addr,remote_addr; int sockfd; int server_ip,nrecv; 阅读全文

posted @ 2012-04-09 16:06 网名还没想好 阅读(499) 评论(0) 推荐(0) 编辑

摘要: popen函数详解描述popen() 函数 用 创建管道 的 方式 启动 一个 进程, 并调用 shell. 因为 管道 是被定义成 单向的, 所以 type 参数 只能 定义成 只读 或者 只写, 不能是 两者同时, 结果流 也相应的 是 只读 或者 只写. command 参数 是 一个 字符串指针, 指向的 是 一个 以 null 结束符 结尾的字符串, 这个 字符串 包含 一个 shell 命令. 这个命令 被送到 /bin/sh 以 -c 参数 执行, 即由 shell 来执行. type 参数 也是 一个 指向 以 null 结束符 结尾的 字符串的指针, 这个字符串 必须是 &# 阅读全文

posted @ 2012-04-09 15:51 网名还没想好 阅读(1035) 评论(0) 推荐(0) 编辑

摘要: INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”。 一般来说,在各个系统中均定义成为0值。例如MontiVista Linux中在/usr/include/netinet/in.h定义为:/* Address to accept any incoming messages. */#define INADDR_ANY ((in_addr_t) 0x00000000)一般情况下,如果你要建立网络服务器应用程序,则你要通知服务器操作系统:请在某地址 xxx.xxx.xxx.xxx上的某端口 yyyy上进行侦听,并且把侦听到的数据包发送 阅读全文

posted @ 2012-04-09 12:10 网名还没想好 阅读(265) 评论(0) 推荐(0) 编辑

摘要: ntohs =net to host short int 16位htons=host to net short int 16位ntohs =net to host long int 32位htonl=host to net long int 32位简述: 将一个无符号短整形数从网络字节顺序转换为主机字节顺序。 #include u_short PASCAL FAR ntohs( u_short netshort); netshort:一个以网络字节顺序表达的16位数。注释: 本函数将一个16位数由网络字节顺序转换为主机字节顺序。返回值: ntohs()返回一个以主机字节顺序表达的数。将主机的无 阅读全文

posted @ 2012-04-09 09:37 网名还没想好 阅读(2155) 评论(0) 推荐(0) 编辑

摘要: 相关函数: bcopy(), memccpy(), memmove(), strcpy(), strncpy() 表头文件: #include <string.h> 定义函数: void *memcpy(void *dest, const void *src, size_t n) 函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束 返回值: 返回指向dest的指针 附加说明: 指针src和dest所指的内存区域不可重叠 - 阅读全文

posted @ 2012-04-09 09:35 网名还没想好 阅读(458) 评论(0) 推荐(0) 编辑

摘要: 很多介绍网络编程的书籍中会这样介绍connect系统调用:将本机的一个指定的套接字连接到一个指定地址的服务器套接字上去。下面是connect系统调用的定义: int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); 参数sockfd是本地机器上的一个套接字描述符,在内核的系统调用函数中该描述符会被转换成与之绑定的一个struct socket结构,这是真正的一个socket,代表了网络通讯中连接的一端。serv_addr和addrlen则是要连接的服务器的地址和地址长度。 于是乎,有了这样的理解. 阅读全文

posted @ 2012-04-09 08:43 网名还没想好 阅读(3716) 评论(0) 推荐(0) 编辑

2012年4月8日

摘要: 表达式的计算分为两种,一种是有副作用的计算,如: (++x)+y 一种是无副作用的计算,如: x*y 有副作用的计算中,子表达式的计算顺序是重要的。例如 (++x)*(x+1) 当x=0时,如果先算++x,上式计算结果为2,如果先算x+1,上式计算结果为1。 再如,对函数g(int,int)的调用g(x,++x),当x=1,这个调用是g(1,2)还是g(2,2)? 所谓“顺序点”,和表达式的副作用紧密相关。再看这个例子: (++i)+(++j) 这个表达式的计算,有两个副作用: i自增1; j自增1; 但是到底哪一个先发生?答案是:任何答案都不对。 为什么... 阅读全文

posted @ 2012-04-08 22:21 网名还没想好 阅读(294) 评论(0) 推荐(0) 编辑

上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 37 下一页