当前位置: 技术问答>linux和unix
请问怎么才C语言中得到system调用的内核命令的返回信息???????????????????
来源: 互联网 发布时间:2015-06-15
本文导语: 请问怎么才C语言中得到system调用的内核命令的返回信息? 比如我先调用system("ls")然后得到该目录下的文件信息,然后分析出一个文件名字然后再调用system("rm -f 文件名"); 我只知道用C调用system后能得到一个整数的返...
请问怎么才C语言中得到system调用的内核命令的返回信息?
比如我先调用system("ls")然后得到该目录下的文件信息,然后分析出一个文件名字然后再调用system("rm -f 文件名");
我只知道用C调用system后能得到一个整数的返回值,那些返回的信息我怎么得到?
比如我在C中调用system("telnet")来执行telnet程序与远端通信,那么我又怎么得到远端返回的信息呢??
比如我先调用system("ls")然后得到该目录下的文件信息,然后分析出一个文件名字然后再调用system("rm -f 文件名");
我只知道用C调用system后能得到一个整数的返回值,那些返回的信息我怎么得到?
比如我在C中调用system("telnet")来执行telnet程序与远端通信,那么我又怎么得到远端返回的信息呢??
|
将标准输出和错误输出从定向,如system("ls > abc.lst");
|
指出一点,system调的不是内核命令哈,是应用程序。
如果你有很多system的东西要调,最好搜集成一个脚本,针对这个脚本调一次system就好了
如果你有很多system的东西要调,最好搜集成一个脚本,针对这个脚本调一次system就好了
|
system是linxu内核提供给外界的system call系统调用~当调用该命令的时候程序由用户态转到内核态~你想看返回的话,可以用strace来跟踪,应该还有别的办法,但是我就知道这种!
|
使用管道,然后用两个进程,比如说在子进程中起用execv(“system”)[参数还得再加]
把子进程的标准输出和标准错误都复制到管道的一端(假设子进程负责写,副进程负责读),那么用dup2(pipe[1],1);dup2(pipe[1],2)。在副进程中读pipe[1]就可以啦,如果是双方通信的话,就用两个管道!
把子进程的标准输出和标准错误都复制到管道的一端(假设子进程负责写,副进程负责读),那么用dup2(pipe[1],1);dup2(pipe[1],2)。在副进程中读pipe[1]就可以啦,如果是双方通信的话,就用两个管道!
|
要么写一个telnet程序,要不用伪终端去实现
|
不好意思,我没时间帮你试验,我以前做过我自己的程序和gdb通信的程序,就是用两个管道来实现的,但是创建管道的时候是用pipe函数来创建的!而不是用你说的命名管道来创建的,而且exec系列函数有很多,在用的时候需要选择一下,我只是给你点意见而已!具体的实现还需要你自己来调试啦~
|
你注册SIGCHLD信号就行了,然后给信号写上自己的函数!