apue2的ruptime和ruptimed程序例子

2014-11-24 09:53:57 · 作者: · 浏览: 1

这个例子是一个c/s程序,有4个文件:ruptime.c clconn.c ruptimed.c initsrv1.c,其中ruptime.c和clconn.c构成client, ruptimed.c initsrv1.c构成server, client向server发送请求,server接到请求后运行uptime命令,并把结果返回给client。编译运行方式如下:


1. 编辑/etc/services文件,追加


ruptime 4000/tcp #apue2的例子程序


重启系统,这样系统新增加一个服务ruptime,为其分配的端口号是4000,然后我们在ruptime.c的函数调用


getaddrinfo (argv[1], "ruptime", &hint, &ailist)


才能成功,并返回主机和服务对应的地址信息,同理在ruptimed.c的函数调用


getaddrinfo (host, "ruptime", &hint, &ailist)


也可以正确工作。


getaddrinfo函数的原型为:


其作用是将一个主机名字和服务名字映射到一个地址,也就是说,给定主机名host和服务名service,函数返回


这个主机和服务的一切网络信息(address information),这些信息存放到res参数中,res是一个struct addrinfo


原型为:


struct addrinfo {


int ai_flags;


int ai_family;


int ai_socktype;


int ai_protocol


socklen_t ai_addrlen;


struct sockaddr *ai_addr;


char *ai_canonname;


struct addrinfo *ai_next;


}


2. 编译运行


apue2> gcc -o ruptime ruptime.c clconn.c libapue.a
apue2> gcc -o ruptimed ruptimed.c initsrv1.c libapue.a
apue2> ./ruptimed
apue2> ./ruptime localhost
09:15:53 up 28 min, 2 users, load average: 0.10, 0.22, 0.18
apue2>