linux下通过dup2标准输出重定向查看系统进程方法(也是popen函数实现的方法)
来源:互联网 发布:内网外网一键切换软件 编辑:程序博客网 时间:2024/05/16 07:21
此程序等同于在linux下运行ps -A命令,popen函数正是用这种方式实现的。
程序代码:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
int mysystem(char* cmdstring, char* buf, int len)
{
int fd[2];
pid_t pid;
int n, count;
memset(buf, 0, len);
if (pipe(fd) < 0)
return -1;
if ((pid = fork()) < 0)
return -1;
else if (pid > 0) /* parent process */
{ close(fd[1]); /* close write end */
count = 0;
while ((n = read(fd[0], buf + count, len)) > 0 && count > len)
count += n;
close(fd[0]);
if (waitpid(pid, NULL, 0) > 0)
return -1;
}
else /* child process */
{ close(fd[0]); /* close read end */
if (fd[1] != STDOUT_FILENO)
{
if (dup2(fd[1], STDOUT_FILENO) != STDOUT_FILENO)
{ return -1;
}
close(fd[1]);
}
if (execl("/bin/sh", "sh", "-c", cmdstring, (char*)0) == -1)
return -1;
}
return 0;
}
int main(int argc, char *argv[])
{
char buf[8192];
char *cmd="ps -A";
mysystem(cmd,buf,8192);
printf("%s", buf);
return 0;
}
运行:
[root@localhost ~]# ./mysystem
PID TTY TIME CMD
1 ? 00:00:00 init
2 ? 00:00:00 migration/0
3 ? 00:00:00 ksoftirqd/0
4 ? 00:00:00 watchdog/0
5 ? 00:00:00 events/0
6 ? 00:00:00 khelper
7 ? 00:00:00 kthread
10 ? 00:00:00 kblockd/0
11 ? 00:00:00 kacpid
72 ? 00:00:00 cqueue/0
75 ? 00:00:00 khubd
77 ? 00:00:00 kseriod
135 ? 00:00:00 pdflush
136 ? 00:00:00 pdflush
137 ? 00:00:00 kswapd0
138 ? 00:00:00 aio/0
286 ? 00:00:00 kpsmoused
316 ? 00:00:00 scsi_eh_0
321 ? 00:00:00 kmirrord
328 ? 00:00:00 kjournald
349 ? 00:00:00 kauditd
375 ? 00:00:00 udevd
710 ? 00:00:00 kgameportd
1266 ? 00:00:00 kmpathd/0
1289 ? 00:00:00 kjournald
1295 ? 00:00:00 vmhgfs
1297 ? 00:00:00 kjournald
- linux下通过dup2标准输出重定向查看系统进程方法(也是popen函数实现的方法)
- popen 重定向标准错误输出到管道流的方法
- dup2函数运用之重定向标准输出
- APUE之dup,dup2函数重定向标准输出实例
- Linux popen()函数实现流重定向
- linux下通过字符模块实现类似ps命令的查看系统进程方法
- 【Linux调试技巧----标准输出重定向到文件】dup2和dup的妙用
- 用dup2将标准输出重定向到一个打开的文件,稍后,恢复标准输出
- unix/linux 下标准输出重定向
- linux下标准输入输出流重定向方法
- Linux重定向的系统调用方法
- linux c语言 重定向子进程的stdout(标准输出)
- Linux系统编程:dup2()重定向
- 【Linux】重定向函数dup/dup2
- linux下用 dup dup2 文件描述符重定向函数 输入输出重定向
- 重定向dup2()函数
- linux 经典的例子 解释 dup dup2 文件描述符重定向函数 输入输出重定向
- linux 经典的例子 解释 dup dup2 文件描述符重定向函数 输入输出重定向
- 移动窗体
- 了解真实的我请随我来!
- 版本管理--居然忘了上传
- [c#]CacheHelper缓存类
- 64位Ubuntu9.04中带kdb的Xen的安装
- linux下通过dup2标准输出重定向查看系统进程方法(也是popen函数实现的方法)
- JS作用域--掌控上下文
- 通过构造器注入IOC的依赖关系
- Asp.Net 上传大文件专题(4)--利用ajax技术显示上传进度
- 对话框程序设置Class Name
- 取2个日期的天数
- 进程的创建和管理
- Chrome扩展中的重要概念:Content Scripts
- ASP.NET2.0中给GridView动态添加模板列并自动绑定数据