怎么会有时错误,有时正确?

hbcb 2005-07-14 08:33:12
Red Hat Linux 9

test.c

#include <stdio.h>

/*简化了的代码*/
int main(){
char str[256];
FILE *fp;
/*显示环境变量TTY,若无则用tty命令取得*/
if((fp=popen("echo $TTY;tty","r"))!=NULL){
while(fgets(str,256,fp)){
printf("%s",str);
break; /*前面会经过其他处理,当条件达到就退出。*/
};
pclose(fp);
};
return(0);
}

运行时有时提示“tty: 写入时发生错误: 断开的管道”,有时又没有这样的错误提示

请问是什么原因造成这样不稳定呢?要怎么解决?
...全文
123 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mprogrammer 2005-07-15
  • 打赏
  • 举报
回复
好帖子!
hbcb 2005-07-15
  • 打赏
  • 举报
回复
现在想想,可能是两个shell命令中间有复杂的系统调用,在第二个命令未开始之前就关闭了管道就出错

我已经采用分开两次打开管道的方法解决了问题,一个管道中不用多个shell命令
spiderww 2005-07-15
  • 打赏
  • 举报
回复
是不是这个原因,break的时候tty还没有写pipe,pclose以后tty再些pipe就有问题了,不注释break,在前面加一个sleep好象也可以
hbcb 2005-07-14
  • 打赏
  • 举报
回复
就是因为不可以才用了两个
在虚拟终端tty1下,我运行了zhcon汉字系统,tty命令得出的不是tty1,而是pst/2,所以就用环境变量TTY;但是在Xwindow终端里面,每新建一个终端就有一个不同的号,而环境变量TTY是不存在的;由于这两方面的原因才使用了echo $TTY;tty
spiderww 2005-07-14
  • 打赏
  • 举报
回复
只要tty可以就直接用tty吧,不要echo $TTY;tty了,好象只用一个是可以的
hbcb 2005-07-14
  • 打赏
  • 举报
回复
去掉break就可以,不过你是怎样想到要去掉break呢?
其他的时候我打开一个内容很多的管道,只读一行就退出也没问题啊
spiderww 2005-07-14
  • 打赏
  • 举报
回复
好象是因为管道内还有内容就断开造成的
spiderww 2005-07-14
  • 打赏
  • 举报
回复
把break注释掉看看可不可以

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧