当前位置: 技术问答>linux和unix
编程,怎样把控制台的信息读取到程序里来
来源: 互联网 发布时间:2015-07-11
本文导语: 比如在程序中用system(cmd)执行一个命令,怎样获得命令执行后的输出值。 不是命令执行的返回值,而是命令的输出值,就0和1 比如,netstat hme 显示结果为1或0 我需要在程序中得到这个结果。 | 同...
比如在程序中用system(cmd)执行一个命令,怎样获得命令执行后的输出值。
不是命令执行的返回值,而是命令的输出值,就0和1
比如,netstat hme
显示结果为1或0
我需要在程序中得到这个结果。
不是命令执行的返回值,而是命令的输出值,就0和1
比如,netstat hme
显示结果为1或0
我需要在程序中得到这个结果。
|
同意楼上的
|
system是得不到输出值,用管道就可以 popen
|
用pipe系统调用,将stdout,stdin重定向到pipe内存中
#include
#include
int main(){
int c;
int p[2] ;
pipe(p);
if (fork()){
close(p[0]);
dup2(p[1], 1);
close(p[1]);
//输出到stdout的内容通过p[1]将会重定向到pipe的内存中
execlp("/bin/ls", "/bin/ls", NULL);
} else {
close(p[1]);
dup2(p[0], 0);
close(p[0]);
//通过p[0]来读写stdin
while ((c=getchar()) != EOF) {
putchar(c);
}
//其实你也可以执行下列命令,那就是我们常用的管道了,
//shell的管道其实就是这样实现的
//execlp( "/bin/cat", "/bin/cat", NULL );
}
}
#include
#include
int main(){
int c;
int p[2] ;
pipe(p);
if (fork()){
close(p[0]);
dup2(p[1], 1);
close(p[1]);
//输出到stdout的内容通过p[1]将会重定向到pipe的内存中
execlp("/bin/ls", "/bin/ls", NULL);
} else {
close(p[1]);
dup2(p[0], 0);
close(p[0]);
//通过p[0]来读写stdin
while ((c=getchar()) != EOF) {
putchar(c);
}
//其实你也可以执行下列命令,那就是我们常用的管道了,
//shell的管道其实就是这样实现的
//execlp( "/bin/cat", "/bin/cat", NULL );
}
}
|
偶顶一下。
|
重定向到一个文件
比如:ps -A &> /root/pro.txt
就会将所有进程的情况输入到文件pro里。
比如:ps -A &> /root/pro.txt
就会将所有进程的情况输入到文件pro里。
|
FILE *fr;
fr = popen("ls /tmp/ -l", "r");
就像读文件一样 即可
fr = popen("ls /tmp/ -l", "r");
就像读文件一样 即可
|
最好的办法是用伪终端,这样兼容性会比较好
|
在命令提示符下用:$script aa //aa为文件名
$执行命令
$exit //退出
aa 就是控制台信息。
写在程序中我没试过, 我想应该好使吧。
$执行命令
$exit //退出
aa 就是控制台信息。
写在程序中我没试过, 我想应该好使吧。
|
直接用popen代替system()
|
可以先把结果重定向到一个临时文件,然后由程序从这个文件里读去这个结果.
|
cmd >> yourfile.txt