unix卷一去年暑假买的到现在才开始看无比惭愧,而且惭愧第一个程序就断断续续弄了几天,要好好写程序了,马上要找工作了,下面介绍下把本书第一个程序跑起来的过程:
搜各种博客
我用系统的是ubuntu 13.04
感谢风无语大神的blog:传送门 以后也要坚持记录自己遇到的各种问题以及解决他们的方法,当我们新接触一个领域时,往往在入门问题上耽误了好多时间,我按照风无语大神的方法一切准备好后,还是有问题
kapop@kapop:~/cpp$ g++ a.cpp -o a -lunp
/tmp/cczLHmnw.o:在函数‘main’中:
a.cpp:(.text+0x30):对‘err_quit(char const*, ...)’未定义的引用
a.cpp:(.text+0x67):对‘err_sys(char const*, ...)’未定义的引用
a.cpp:(.text+0xd9):对‘err_quit(char const*, ...)’未定义的引用
a.cpp:(.text+0x108):对‘err_sys(char const*, ...)’未定义的引用
a.cpp:(.text+0x142):对‘err_sys(char const*, ...)’未定义的引用
a.cpp:(.text+0x181):对‘err_sys(char const*, ...)’未定义的引用
collect2: 错误: ld 返回 1
kapop@kapop:~/cpp$ g++ a.cpp unp.c -o a -lunp
kapop@kapop:~/cpp$ ./a 127.0.0.1
03 AUG 2013 15:53:32 CST
unp.c文件内容如下
#include
#include
//#include "ourhdr.h"
#include "unp.h"static void err_doit(int, const char *, va_list);char *pname = NULL; /* caller can set this from argv[0] *//* Nonfatal error related to a system call.* Print a message and return. */void
/* $f err_ret $ */
err_ret(const char *fmt, ...)
{va_list ap;va_start(ap, fmt);err_doit(1, fmt, ap);va_end(ap);return;
}/* Fatal error related to a system call.* Print a message and terminate. */void
/* $f err_sys $ */
err_sys(const char *fmt, ...)
{va_list ap;va_start(ap, fmt);err_doit(1, fmt, ap);va_end(ap);exit(1);
}/* Fatal error related to a system call.* Print a message, dump core, and terminate. */void
/* $f err_dump $ */
err_dump(const char *fmt, ...)
{va_list ap;va_start(ap, fmt);err_doit(1, fmt, ap);va_end(ap);abort(); /* dump core and terminate */exit(1); /* shouldn't get here */
}/* Nonfatal error unrelated to a system call.* Print a message and return. */void
/* $f err_msg $ */
err_msg(const char *fmt, ...)
{va_list ap;va_start(ap, fmt);err_doit(0, fmt, ap);va_end(ap);return;
}/* Fatal error unrelated to a system call.* Print a message and terminate. */void
/* $f err_quit $ */
err_quit(const char *fmt, ...)
{va_list ap;va_start(ap, fmt);err_doit(0, fmt, ap);va_end(ap);exit(1);
}/* Print a message and return to caller.* Caller specifies "errnoflag". */static void
err_doit(int errnoflag, const char *fmt, va_list ap)
{int errno_save;char buf[MAXLINE];errno_save = errno; /* value caller might want printed */vsprintf(buf, fmt, ap);if (errnoflag)sprintf(buf+strlen(buf), ": %s", strerror(errno_save));strcat(buf, "\n");fflush(stdout); /* in case stdout and stderr are the same */fputs(buf, stderr);fflush(stderr); /* SunOS 4.1.* doesn't grok NULL argument */return;
}
a.cpp如下所示
#include "unp.h"
#include
#include
#include
#include
using namespace std;
int main(int argc, char **argv){int sockfd, n;char recvline[MAXLINE + 1];struct sockaddr_in servaddr;if (argc != 2) {
// cout <<"ni mei can shu shao le!" <
// cout <<"Fuck ing life ! " <
感谢互联网的共享精神&#xff0c;感谢记录问题并提供解决方法的大神&#xff0c;让我等*nix菜鸟取得进步。