UNIX网络编程和UNIX环境高级编程的环境搭建和运行实例

UNIX网络编程和UNIX环境高级编程的环境搭建和运行实例

一、下载书中源代码unpv13e.tar.gz:

这个可以在书中前言给出的地址下载:http://www.unpbook.com/unpv13e.tar.gz

1、下载完之后解压,打开unpv13e文件夹中的README,按照写的一步一步来。

Execute the following from the src/ directory:

    ./configure    # try to figure out all implementation differences

    cd lib         # build the basic library that all programs need
    make           # use "gmake" everywhere on BSD/OS systems

    cd ../libfree  # continue building the basic library
    make

    cd ../libroute # only if your system supports 4.4BSD style routing sockets
    make           # only if your system supports 4.4BSD style routing sockets

    cd ../libxti   # only if your system supports XTI
    make           # only if your system supports XTI
(这几步不一定需要,需要操作系统支持)

    cd ../intro    # build and test a basic client program
    make daytimetcpcli
    ./daytimetcpcli 127.0.0.1

If all that works, you're all set to start compiling individual programs.

Notice that all the source code assumes tabs every 4 columns, not 8.

MORE DETAILS
============


2、这样就在unpv13e目录中生成了libunp.a,接下来我们将该库文件复制到系统可以找到的路径中,我将它放到/usr/lib中:
    cp libunp.a /usr/lib
注意如果提示没有权限的话,请切换到root账户执行该命令。


3、将unp.h和config.h复制到/usr/include中。

cp unp.h /usr/include

cp config.h /usr/include


4、修改unp.h    由于我们将两个文件放在同一个目录中,所以需要修改一下unp.h中的头文件包含路径,用VI或VIM打开unp.h,即将#include "../config.h"改成#include "./config.h",(视具体情况定,如果不行,试试#include "config.h"),同时在unp.h中增加一句#define MAXLINE 2048

注意:在编译时记得制定我们依赖的unplib.a库文件,在后面加上 -lunp,就可以链接此库文件。




附上我的机子出现的一些小问题:

    在我看《UNIX高级环境编程》时,按照上述步骤完成了环境的搭建,运行没有问题,当我看《UNIX网络编程》时,出现unp.h错误,如socket.h报错等等,在各大论坛苦苦搜寻到如下网站:

http://pix.cs.olemiss.edu/csci561/prg561.1.html

按照上面的办法运行后发现不会报错,于是我删掉了原来的 /usr/include文件夹里的unp.h,   config.h,重新下了个unpv13e,重新加进去就OK了。


运行《UNIX环境高级编程》上的程序1-9:

#include "apue.h"

int
main(void)
{
  printf("process uid=%d,gid=%d\n",getuid(),getgid());
  exit(0);
}


运行结果如下:





运行《UNIX网络编程》的时间获取客户端和服务器程序:

    客户端程序:

#include "unp.h"  
  
int main(int argc, char** argv)  
{  
    int sockfd, n;  
    char recvline[MAXLINE + 1];   
    struct sockaddr_in servaddr;   
          
    if (argc != 2)  
        err_quit("Usage: a.out <IPaddress>");  
    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)  
        err_sys("socket error");  
    bzero(&servaddr, sizeof(servaddr));  
    servaddr.sin_family = AF_INET;  
    servaddr.sin_port = htons(8080);  
    if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)  
        err_quit("inet_pton error for %s", argv[1]);  
    if (connect(sockfd, (SA*)&servaddr, sizeof(servaddr)) < 0)  
        err_sys("connect error");  
  
    while ((n = read(sockfd, recvline, MAXLINE)) > 0) {  
        recvline[n] = 0;  
        if (fputs(recvline, stdout) == EOF)  
            err_sys("fputs error");  
    }  
    if (n < 0)  
        err_sys("read error");  
    exit(0);  
}  


服务器程序:

#include "unp.h"                  
#include <time.h>  
  
int main(int argc, char** argv)  
{  
    int listenfd, connfd;  
    struct sockaddr_in servaddr;  
    char buff[MAXLINE];  
    time_t ticks;  
  
    listenfd = Socket(AF_INET, SOCK_STREAM, 0);   
    bzero(&servaddr, sizeof(servaddr));  
    servaddr.sin_family = AF_INET;  
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);  
    servaddr.sin_port = htons(8080);  
    Bind(listenfd, (SA*)&servaddr, sizeof(servaddr));  
    Listen(listenfd, LISTENQ);  
    for (;;) {  
        connfd = Accept(listenfd, (SA*)NULL, NULL);  
        ticks = time(NULL);  
        snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));  
        Write(connfd, buff, strlen(buff));  
        Close(connfd);  
    }     
    exit(0);  
}  

运行结果如下:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值