当前位置:  技术问答>linux和unix

关于:UNIX网络编程第二卷 进程间通信问题!

    来源: 互联网  发布时间:2016-05-01

    本文导语:    我最近刚开始看这本书,调试书上第一个例子时,有如下错误,源代码: #include  #include  #include  //#include  #include  int main(int argc,char** argv) { struct stat stat; if(argc != 2) printf("usage:ftok"); stat(argv[1],&stat); printf...

  我最近刚开始看这本书,调试书上第一个例子时,有如下错误,源代码:
#include 
#include 
#include 
//#include 
#include 

int
main(int argc,char** argv)
{
struct stat stat;
if(argc != 2)
printf("usage:ftok");
stat(argv[1],&stat);
printf("st_dev:%lx,st_ino:%lx,key:%xn",
(u_long)stat.st_dev,(u_long)stat.st_ino,
ftok(argv[1],0x57));
exit(0);
}

执行后,如下错误:3.2.c: 在函数‘main’中:
3.2.c:10: 错误: ‘stat’的存储大小未知

很奇怪阿!请高手指教!!!
还有就是请教看过这本书的朋友,书上作者定义的unpipc.h头文件,我在网上找到后方到/usr/include目录下 编译的话会报这个头文件有错误!!!  哪位朋友有源代码的话能给我发一份吗?感谢了阿!邮箱是:lvrainbow19871@gmail.com

|


#include 
#include 
#include 
#include 
#include 
#include 
#include 

int
main(int argc, char **argv)
{
  struct stat stbuf;

  if (argc != 2) {
    printf("usage:ftok ");
    exit(1);
  }

  if (stat(argv[1], &stbuf) == -1) {
    perror("stat error");
    exit(1);
  }

  printf("st_dev:%lx,st_ino:%lx,key:%xn", (u_long)stbuf.st_dev, (u_long)stbuf.st_ino, ftok(argv[1], 0x57));

  exit(0);
}




如果是想下载W.Richard Stevens他的源代码到他的个人网站去下载.
http://www.kohala.com/start/
http://www.kohala.com/start/unpv22e/unpv22e.html

至于unpipc.h,我想这也是作者图方便吧,把所有的头文件和定义,函数声明放一块.有不
同意见请砸砖.我和你一样,自己仿照它,改写它.

|
struct stat stat;

这里你不要声明stat的变量啊

源代码下载:
http://download.csdn.net/source/857949

源代码使用说明,仅供参考:

首先需要make一次源代码

编辑源码解压生成的apue.2e文件夹下的Make.defines.linux

修改WKDIR=/home/var/apue.2e为你的apue.2e目录,比如我的apue源码解压在/usr/local,那我就改为:

WKDIR=/usr/local/apue.2e

然后进入apue.2e/std 目录,编辑linux.mk。修改里面所有的nawk为awk。

最后返回apue.2e目录,执行make命令。

以下是编译源码时的错误提示跟解决方法(假定你的工作目录跟我的一样,为/usr/local/apue.2e)

错误提示1:

myls.c:1:19: apue.h: No such file or directory
myls.c: In function `main':
myls.c:13: error: `NULL' undeclared (first use in this function)
myls.c:13: error: (Each undeclared identifier is reported only once
myls.c:13: error: for each function it appears in.)

解决办法:

拷贝apue.h到系统默认头文件目录中

$cp /usr/local/apue.2e/include/apue.h /usr/include

错误提示2:

/tmp/ccBBopm0.o(.text+0x2b): In function `main':
: undefined reference to `err_quit'
/tmp/ccBBopm0.o(.text+0x5f): In function `main':
: undefined reference to `err_sys'
collect2: ld returned 1 exit status

解决办法:

err_quit跟err_sys是作者自己定义的错误处理函数,需要单独定义头文件

在/usr/include 下新建一个名为myerr.h的文件

拷贝下边的内容到myerr.h(其实此头文件在原书的附录B中)

#include "apue.h"
#include       /* for definition of errno */
#include      /* ISO C variable aruments */

static void err_doit(int, int, const char *, va_list);

/*
* Nonfatal error related to a system call.
* Print a message and return.
*/
void
err_ret(const char *fmt, ...)
{
    va_list     ap;

    va_start(ap, fmt);
    err_doit(1, errno, fmt, ap);
    va_end(ap);
}

/*
* Fatal error related to a system call.
* Print a message and terminate.
*/
void
err_sys(const char *fmt, ...)
{
    va_list     ap;

    va_start(ap, fmt);
    err_doit(1, errno, fmt, ap);
    va_end(ap);
    exit(1);
}

/*
* Fatal error unrelated to a system call.
* Error code passed as explict parameter.
* Print a message and terminate.
*/
void
err_exit(int error, const char *fmt, ...)
{
    va_list     ap;

    va_start(ap, fmt);
    err_doit(1, error, fmt, ap);
    va_end(ap);
    exit(1);
}

/*
* Fatal error related to a system call.
* Print a message, dump core, and terminate.
*/
void
err_dump(const char *fmt, ...)
{
    va_list     ap;

    va_start(ap, fmt);
    err_doit(1, errno, 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
err_msg(const char *fmt, ...)
{
    va_list     ap;

    va_start(ap, fmt);
    err_doit(0, 0, fmt, ap);
    va_end(ap);
}

/*
* Fatal error unrelated to a system call.
* Print a message and terminate.
*/
void
err_quit(const char *fmt, ...)
{
    va_list     ap;

    va_start(ap, fmt);
    err_doit(0, 0, fmt, ap);
    va_end(ap);
    exit(1);
}

/*
* Print a message and return to caller.
* Caller specifies "errnoflag".
*/
static void
err_doit(int errnoflag, int error, const char *fmt, va_list ap)
{
    char    buf[MAXLINE];
   vsnprintf(buf, MAXLINE, fmt, ap);
   if (errnoflag)
       snprintf(buf+strlen(buf), MAXLINE-strlen(buf), ": %s",
         strerror(error));
   strcat(buf, " ");
   fflush(stdout);     /* in case stdout and stderr are the same */
   fputs(buf, stderr);
   fflush(NULL);       /* flushes all stdio output streams */
}



然后在你需要使用这几种错误处理函数的程序源代码里加入

#include 

就好了。

|
我觉得学编程只知道结果是不行的,楼主应该学会去debug,看问题出在什么地方。
这才是学习的正确方法阿。

|
建议下载整个源代码,然后好好研究。

|
//#include  

你干嘛把它注释掉呀

    
 
 

您可能感兴趣的文章:

  • 读过 Unix网络编程 或者 熟知Unix网络编程的 的进来看一下
  • 刚刚接触Unix系统和Unix编程。急需Unix下多线程程序设计和网络Socket程序设计方面的资料。
  • UNIX网络编程卷1
  • 请问unix网络编程和linux网络有什么区别
  • 谁知道哪有《Unix网络编程》w.richard stevens 著的下载?
  • 求关于UNIX网络编程的好书 最好带项目的那种
  • Unix/Linux网络编程怎样来做一个项目?
  • 请推荐几本Linux/Unix网络编程的好书吧
  • unix网络编程资料帮忙 大哥大姐进来瞧瞧啊
  • 学UNIX网络编程,看哪些书好?大家各抒已见~
  • 《UNIX网络编程》这本书适合linux下的网络编程吗?
  • 看完了<unix网络编程>后
  • Unix/Linux网络编程可以用来做什么?一般从事什么样的职业?
  • 求助:linux/unix网络编程
  • 运行<<UNIX网络编程卷一>>中程序的错误?
  • 哪里有steven的UNIX网络编程源码?
  • 谁知道哪里有unix网络编程第一卷和第二卷电子版的下载?
  • 哪有unix下的c网络编程,如地址有效,我一次性给50分
  • 哪位好人能告诉我哪儿有《UNIX网络编程2版1卷》下载?????
  • unix网络编程中err_quit()是什么函数?
  • 如何AIX UNIX 主机在进程中通过C编程获取进程名
  • unix进程问题,为什么关了控制界面进程结束了
  • 小妹请教各位大哥,在unix下,如何显示进程,和kill掉进程?
  • unix下用进程名杀进程 报错
  • 用Delphi或VC怎么向unix发送命令来检测进程甚至能够控制进程?
  • unix中有关父进程和子进程的问题
  • 在unix下,后台trf001同时并发了很多进程,请用一条命令,杀掉所有trf001并发的进程
  • 在unix下做webserver,使用多进程?多线程?
  • 发一个关于UNIX进程的帖子
  • unix下异步进程的问题
  • 求救!!!Tru64 Unix如何列出及kill掉后台进程?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高级UNIX编程和UNIX环境高级编程是不是一本书
  • 想看linux内核源代码,另外手头上有一本《unix环境高级编程》,需要先把《unix环境高级编程》看完之后再看内核吗?
  • 我下载了UNIX环境高级编程的源码,可是打开时有错误,怎么才可以打开?还有谁有《UNIX环境高级编程(英文版)》的chm格式的ebook?
  • 想学linux下程序开发,不知道买哪本书好《UNIX环境高级编程》(中文第一版)还是《UNIX环境高级编程》(英文第二版)
  • unix编程与linux编程有什么区别?
  • [学习UNIX编程]初学UNIX编程,遇到一个小小的问题,烦劳大虾帮忙解惑,谢谢!
  • 看Unix环境高级编程,提到了V和bsd,有很多不同,但是没有提到Linux,请问linux跟BSD或者unix V 编程细节哪些不同的,特别是线程,进程,和socke
  • 都说《UNIX环境高级编程》好,对于学linux编程好不好?《Linux下的c编程》《嵌入式系统C编程》那个更适合初学者?各是那个出版社的?(
  • 我初学 Unix 编程,在看《Unix环境高级编程》时有一个问题请指教。
  • 我学&用Linux编程,手里有《UNIX环境高级编程》,看它行吗?
  • 谁有介绍UNIX下面函数的书啊,类似UNIX编程参考手册的东西
  • UNIX编程艺术,了解unix文化强烈推荐这本书
  • UP有分,推荐几本书给我吧,兄弟们,UNIX入门与编程的与编程的,
  • 学Linux编程前要学Unix吗?哪里有学Linux编程的好书下载?
  • 入门问题,我想向UNIX编程方向发展,单目前不会UNIX,我该如何做
  • 请问:如果懂unix编程,那么会懂linux编程吗?一般来说:它们有什么关系呢?
  • 都说《UNIX环境高级编程》好,对于学linux编程好不好?是那个出版社的,是中文版吗?
  • 学习UNIX编程应该从那里入手?
  • 请教:我想在unix编程领域发展,我应该在哪些方面努力?
  • 请问linux/unix下编程与windows下编程有什么不同呢??
  • java命名空间java.util.regex类pattern的类成员方法: unix_lines定义及介绍
  • 关于UNIX的历史 : 1973年,K.Thompson和D.M.ritchie,用C改写UNIX。那么,在此之前,UNIX是用什么写的?
  • unix/Linux下c++ boost thread库读写锁介绍
  • 没有unix系统我如何学习unix
  • php将标准字符串格式时间转换成unix时间戳_strtotime
  • unix盘哪里有下载的??哪里有比较好的unix论坛??万分感谢!!!!!!!!!
  • php将unix时间戳转换成字符串时间函数(date)
  • 急!装完unix5.06,再装win2000。重启后不能进unix.
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • UNIX特急!!!digital unix问题,请专家快来!!!
  • UNIX支持中文否,请推荐UNIX好书


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3