当前位置: 技术问答>linux和unix
如何开启一个进程,并接管所有输入输出?
来源: 互联网 发布时间:2017-04-21
本文导语: 比如我有一个程序a,现在我想在a中使用ftp客户端(一个程序,位置在/usr/bin/ftp),它是交互式的,跟mysql客户端差不多。现在我想接管ftp的所有输入输出,即,我向ftp输入命令,ftp执行,并返回结果,跟直接在终端...
比如我有一个程序a,现在我想在a中使用ftp客户端(一个程序,位置在/usr/bin/ftp),它是交互式的,跟mysql客户端差不多。现在我想接管ftp的所有输入输出,即,我向ftp输入命令,ftp执行,并返回结果,跟直接在终端执行ftp的效果完全一样(有什么用呢?由于命令是从a发出的,a是我写的,我可以自动发出命令,达到自动下载上传文件的目的)!
如果我创建套接字,连接ftp服务器,发送命令:USER PASS STOR等,也可以满足我的要求,但麻烦。用ftp客户端相对简单很多。
如果我创建套接字,连接ftp服务器,发送命令:USER PASS STOR等,也可以满足我的要求,但麻烦。用ftp客户端相对简单很多。
|
你这个理解我也赞同。stdin和stdout是程序的两个全局变量,为FILE*类型,在程序开始时就会用STDOUT_FILENO和STDIN_FILENO,所以setvbuf是不会在exec后的程序中生效的。
目前我也不知道如何解决。不知道有没有什么办法模拟终端,像shell一样。
|
两个pipe即可。
相关函数pipe, dup2
fork,然后将子进程0,1,2用dup2分别重定向到pipe中,然后exec执行ftp程序。
父进程读写两个pipe的另一端即可。
相关函数pipe, dup2
fork,然后将子进程0,1,2用dup2分别重定向到pipe中,然后exec执行ftp程序。
父进程读写两个pipe的另一端即可。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。