免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3401 | 回复: 18
打印 上一主题 下一主题

学习过《UNIX环境高级编程》的请进 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-16 10:30 |只看该作者 |倒序浏览
参见《UNIX环境高级编程》的15-1程序
参见《UNIX环境高级编程》的14-3程序

其中涉及到
static int fd[2];//在程序15-1中定义为int fd[2];

if( write(fd[0], line, n) != n)
        err_sys("write error to pipe");

这一段程序代码
我编译成功 不过在运行程序的时候
总是出现:
(testback@qsd)>output
12 34
write error to pipe: Bad file number

这样的错误

请大家告诉我解决方法^_^

论坛徽章:
0
2 [报告]
发表于 2005-11-16 11:16 |只看该作者

您也在看APUE呀,老兄帮我一下呀!!!

我把APUE的随书代码找到,认真的读了README,生成Make.defines,把libmisc.a 的路径改了,可是在
lib.svr4中make死循环,我该怎么办,帮我呀!!  谢谢先。

我的系统是RH 8.0

论坛徽章:
0
3 [报告]
发表于 2005-11-16 13:03 |只看该作者
-_-!

先喊你一声大哥
然后再告诉你 我是每个程序都是手工敲进电脑
自己写Makefile 然后实现验证程序正误的

至于你的问题 我不能帮你 你最好发个帖子问问哈

论坛徽章:
0
4 [报告]
发表于 2005-11-16 13:18 |只看该作者
顺带问一声楼主:
第一个例子P2的那个ls你是怎么通的?
                     程序1-1列出一个目录所有的文件
#include <sys/types.h>
#include <dirent.h>
#include "ourhdr.h"
........
我找了这个书的例子的源码,这个ourhdr.h有这样一个文件,怎么编译过去啊?是不是应该还有一个ourhdr.c这样的文件(这个文件没有找到)。
我gcc提示我先编译头文件。可是没有ourhdr.c啊?

论坛徽章:
0
5 [报告]
发表于 2005-11-16 13:39 |只看该作者
原帖由 amoyppa 于 2005-11-16 13:18 发表
顺带问一声楼主:
第一个例子P2的那个ls你是怎么通的?
                     程序1-1列出一个目录所有的文件
#include <sys/types.h>
#include <dirent.h>
#include "ourhdr.h"
我找了这个书的例子的源码,这个ourhdr.h有这样一个文件,怎么编译过去啊?是不是应该还有一个ourhdr.c这样的文件(这个文件没有找到)。
我gcc提示我先编译头文件。可是没有ourhdr.c啊?


请你看看代码中含有"err_"开头的一类函数 看到了没有?
这个只是在ourhdr.h中声明了函数原型,并没有给出定义
给出定义的是error.c这个文件----很多目录下有^_^

我给你的建议:是把error.c更改名称为error.h
以后在你的程序中包含error.h这个头文件就可以了^_^
顺带提醒你 如果error.h不在根目录 记得在编译参数中加 -I[pathname]

----------------------------------------------------------------------
-_-! 我自己的是手工敲进去的 用了三天 终于敲到15章了 好累!

论坛徽章:
0
6 [报告]
发表于 2005-11-16 14:18 |只看该作者

^_^,是这样呀!!!

看来也只有这样了 !!
我在看看吧,想办法make过去,他的ourhdr.h中定义了很多函数,宏,报错信息等等,
要是搞定 Make.defines  你这次碰到的问题也就不存在了。

论坛徽章:
0
7 [报告]
发表于 2005-11-16 14:23 |只看该作者
恩谢谢楼上的。按照你的方法搞定。
另外还有一个办法就是把err_函数替换成printf也可以。

论坛徽章:
0
8 [报告]
发表于 2005-11-16 14:58 |只看该作者
原帖由 ernestliu_nk 于 2005-11-16 14:18 发表
看来也只有这样了 !!
我在看看吧,想办法make过去,他的ourhdr.h中定义了很多函数,宏,报错信息等等,
要是搞定 Make.defines  你这次碰到的问题也就不存在了。


大哥~~~~ 我的问题很可能是系统问题(如果我估计错了,请高手笑得小声一点哈 ^_^)
不是搞定Make.defines就可以搞定的吧

我刚刚看了source_code下面的README
我的理解是这样的
你把每一个子目录下面的Makefile文件的第一行
include ../Make.defines中的Make.defines改为(根据README的提示改)
你的系统所对应的
(Make.def.44 §§Make.def.sun §§ Make.def.svr4)其中的一个
我假设你把Make.defines更改成Make.def.svr4

好了

然后更改你Make.def.svr4中的LDLIBS=/home/stevens/libmisc.a这句
改成libmisc.a在你机子上面的目录
应该就可以make过去了

我没有自己试验 因为我是通过NetTerm连接到到公司的主机的
而且我联机的是AIX Version 5.1
我不知道跟 SunOS 4.1.x, SVR4, or BSD/386其中的哪一种比较接近
反正我是没有在我的根目录下找到libmisc.a这个文件
(怀疑是不是要去作者的网站上下载下来的)

祝你好运 ^_^

论坛徽章:
0
9 [报告]
发表于 2005-11-16 15:05 |只看该作者
原帖由 amoyppa 于 2005-11-16 14:23 发表
恩谢谢楼上的。按照你的方法搞定。
另外还有一个办法就是把err_函数替换成printf也可以。




好想学雨丝风片大哥讲一个故事告诉你道理
可惜我不是讲故事的人啊 -_-!

把err_函数替换成printf函数实现的话
确实可以实现
不过你不知道你的出错原因是什么
不然作者就编写一个error.c
来简化了每个程序的很多代码

你认真看看书吧 ^_^

论坛徽章:
0
10 [报告]
发表于 2005-11-16 17:10 |只看该作者
然后更改你Make.def.svr4中的LDLIBS=/home/stevens/libmisc.a这句
改成libmisc.a在你机子上面的目录
应该就可以make过去了


很对不起 刚刚讲错了
首先 $cp Make.def.svr4 Make.defines
其次 是修改路径名为你想存放libmisc.a的地方
修改LDFLAGS和LIB两个变量^_^

最后 在lib.svr4文件夹中运行$make systype.sh


-----------------------------------------
我已经搞定了 ^_^ 祝你好运
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP