unix 网络编程学习-使用作者的头文件

转载来自

http://awind.blog.51cto.com/4628868/861306

http://www.cnblogs.com/shenlian/archive/2011/08/19/2146190.html


是关于搭建环境的过程.

其实在第四步的1中,直接gedit就可以编辑,不非得用命令行,sudo gedit  /lib/unp.h

以下是原作者的文章

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://awind.blog.51cto.com/4628868/861306

要开始接触网络编程,用的是大名鼎鼎的Unix Network Programming这本书,第一个例子就遇到困难了,unp.h没有,到谷歌上搜索了一下,找到了一些方法。先下载unpv13e.tar.gz,

1.解压下载的unpv13e.tar.gz文件

 

 
 
  1. tar -zxvf unpv13e.tar.gz 

2。终端中进入unpv13e目录(需要给configure文件增加x权限)

 

 
 
  1. ./configure 
  2. cd lib 
  3. make 
 
 
  1. cd ../libfree  # continue building the basic library 
  2. make 

 

然后在unpv13e文件夹中成功生成libunp.a文件

3.将生成的libunp.a静态库复制到/usr/lib/中

  
  
  1. cd .. 
  2. sudo cp libunp.a /usr/lib  

4,修改unp.h并将其和config.h拷贝到/usr/include中,为了以后include方便


 
 
  1. kate lib/unp.h   //将unp.h中#include "../config.h"修改为#include "config.h"   

 

 
 
  1. sudo cp lib/unp.h /usr/include   
  2. sudo cp config.h /usr/include  

这里复制到/usr/include目录后,非root用户无权查看,记得chmod 744 一下



我们现在来讲一个实例

首先在任意目录下

新建两个文件

server.c

#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(13); /* daytime server */

    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);
    }
}

client.c

#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(13); /* daytime server */
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, 4096)) > 0) {
recvline[n] = 0; /* null terminate */
if (fputs(recvline, stdout) == EOF)
{
err_sys("fputs error");
}
//printf("readed %d byte data\n", n);
}
if (n < 0)
err_sys("read error");

exit(0);
}




其实,我想用codeblock进行编译

但是会一直出现:

obj/Debug/main.o||In function `main':|
/home/lyle/cppproject/unixcode/main.cpp|12|undefined reference to `Socket(int, int, int)'|
/home/lyle/cppproject/unixcode/main.cpp|19|undefined reference to `Bind(int, sockaddr const*, unsigned int)'|
/home/lyle/cppproject/unixcode/main.cpp|21|undefined reference to `Listen(int, int)'|
/home/lyle/cppproject/unixcode/main.cpp|25|undefined reference to `Accept(int, sockaddr*, unsigned int*)'|
/home/lyle/cppproject/unixcode/main.cpp|29|undefined reference to `Write(int, void*, unsigned int)'|
/home/lyle/cppproject/unixcode/main.cpp|31|undefined reference to `Close(int)'|
||=== 已完成构建: 6 个错误, 0 个警告 ===|

原因是没有静态库,估计是这样的,

引用来自http://blog.csdn.net/jiao319/article/details/7752281

  通常在一些项目中需要使用外部的头文件和静态库文件,codeblock通过如下方法添加头文件和库文件。
    以codeblock 10.05为例
    添加头文件:依次点击project->bulid options->Search directories,在该标签页中点击Compiler,单击Add按钮添加头文件路径
    添加静态库路径:依次点击project->bulid options->Linker setting,在该标签页中点击Add按钮添加静态库路径。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值