免费注册 查看新帖 |

Chinaunix

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

[C] [求助] 在程序(C语言)用system函数运行“ftp -n”出错不返回? [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
1 [报告]
发表于 2005-03-18 15:13 |显示全部楼层

[求助] 在程序(C语言)用system函数运行“ftp -n”出错不返回?

用popen和pclose代替system。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-03-18 15:28 |显示全部楼层

[求助] 在程序(C语言)用system函数运行“ftp -n”出错不返回?

man一下好了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-03-18 15:29 |显示全部楼层

[求助] 在程序(C语言)用system函数运行“ftp -n”出错不返回?

这是我以前翻译的:
POPEN(3)        Linux Programmer's Manual        POPEN(3)

名称:
popen, pclose - 进程 I/O。

大纲:
#include <stdio.h>;

FILE *popen(const char *command, const char *type);

int pclose(FILE *stream);

描述:
popen()函数用创建管道的方式启动一个进程,并调用shell。因为管道是被定义成单向的,所以type参数只能定义成只读或者只写,不能是两者同时;结果流也相应的是只读或者只写。
command参数是一个字符串指针,指向的是一个以null结束符结尾的字符串,这个字符串包含一个shell命令。这个命令被送到/bin/sh以-c参数执行;即由shell来执行。 mode参数也是一个指向以null结束符结尾的字符串的指针,这个字符串必须是'r'或者'w’来指明是读还是写。(注:没找到这个mode参数啊。)
popen()函数的返回值是一个普通的标准I/O流,(),它只能用pclose函数来关闭,而不是fclose函数。向这个流的写入被转化为对command命令的标准输入;而command命令的标准输出则是和调用popen()函数的进程相同,除非这个被command命令自己改变。相反的,读取一个“被popen了的”流,就相当于读取command命令的标准输出,而command的标准输入则是和调用popen()函数的进程相同。
注意,popen()函数的输出流默认是被全缓冲的。
pclose()函数等待相关的进程结束并返回一个command命令的退出状态,就像wait4函数一样。

返回值:
如果fork(2)或者pipe(2)调用失败,或者它分配不到内存,popen()函数返回NULL。
如果wait4返回一个错误,或者其他什么错误发生,pclose()函数返回一个-1。

错误:
如果内存空间开辟失败,popen()函数并不设置errno。如果内部的fork()函数或者pipe()函数失败,errno则会被适当的设置。如果mode参数是不可用的,而且这个状态被侦测到,errno将被设置成EINVAL。(注:不懂。)

适应环境:
POSIX.2

BUGS:
因为command命令读取的标准输入和调用popen()函数的进程共享一个“搜索偏移量”,所以,如果原进程已经完成了一个缓冲的读取,那么command命令的输入位置将是不可预料的。相似的,command命令的输出会和原进程的输出混杂在一起。后者可以在调用popen()函数前调用fflush()函数来避免。
如果这个shell执行失败,将不能辨别出这个错误是由shell运行这个command命令失败,还是command命令立即退出引起的。唯一的一个“线索”,就是127这个退出状态。

历史:
popen()函数和pclose()函数(第一次)出现在Version 7 AT&T UNIX。

参考:
fork(2), sh(1), pipe(2), wait4(2), fflush(3), fclose(3), fopen(3), stdio(3), system(3)。

BSD MANPAGE        1998-05-07        POPEN(3)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP