当前位置:  技术问答>linux和unix

利用fork 与 dup2 执行 系统命令, 别的命令都可以获取执行结果,就fdisk 命令不可以. execve("/sbin/fdisk",args,NULL) , args 命令参数.

    来源: 互联网  发布时间:2016-05-20

    本文导语:  问题: 利用 fork 与 dup2 执行程序命令的时候,别的命令都能输出出来。   比如:   if ( -1 == (execve("/bin/ls", args, NULL)) ) 就能返回执行结果.  程序输出 ls的执行结果. 如果变成 if ( -1 == (execve("/sbin/fdisk", ...

问题:
利用 fork 与 dup2 执行程序命令的时候,别的命令都能输出出来。
 
比如: 
 if ( -1 == (execve("/bin/ls", args, NULL)) ) 就能返回执行结果.  程序输出 ls的执行结果.

如果变成 if ( -1 == (execve("/sbin/fdisk", args, NULL)) ) ,  当然args 参数也在变.
程序就捕获不到标准输出了.
我想得到的结果是:
  Command (m for help): 

 
程序代码,linux 下编译调试通过:
 #include 
 
#include 
#include 

       int main()
       {
         int pfds[2];
 int ret =0;
 char* buffer[101];
 int howMany = 0;
        
         char* args[] = {"/sbin/fdisk","/dev/sdb", NULL };/* Usb device*/
         char* strs= NULL;
  int fd; 
         

         if ( pipe(pfds) == 0 ) {

           if ( fork() == 0 ) {
  printf("-------parent id-----------n");

             close(1);
             
             ret = dup2( pfds[1], 1 );
fd = fopen("/root/mc.txt","wb");
if(ret == -1)
printf("-----error----n");
else
printf("--------success--------n");
             
             close( pfds[0] );
howMany = read(pfds[1], buffer, 100);
printf("-buffer: %sn",buffer);
fwrite(buffer,1,100,fd);

     
           printf("-------parent id-------end----n");

           } else 
           {/*in*/
            printf("-------child id-----------n");

             close(0);
close(1);
             ret = dup2( pfds[0], 0 );
             close( pfds[1] );
             
             
              if ( -1 == (execve("/sbin/fdisk",args, NULL)) )
    {
        perror( "execve" );
        return -1;
    }
   
   

           }

         }

         return 0;
       }

|
我刚才试了一下,如下:
[root@localhost ~]# fdisk > a.txt

Usage: fdisk [-l] [-b SSZ] [-u] device
E.g.: fdisk /dev/hda  (for the first IDE disk)
  or: fdisk /dev/sdc  (for the third SCSI disk)
  or: fdisk /dev/eda  (for the first PS/2 ESDI drive)
  or: fdisk /dev/rd/c0d0  or: fdisk /dev/ida/c0d0  (for RAID devices)
  ...
[root@localhost ~]# less a.txt
[root@localhost ~]# fdisk >& a.txt
[root@localhost ~]# less a.txt

Usage: fdisk [-l] [-b SSZ] [-u] device
E.g.: fdisk /dev/hda  (for the first IDE disk)
  or: fdisk /dev/sdc  (for the third SCSI disk)
  or: fdisk /dev/eda  (for the first PS/2 ESDI drive)
  or: fdisk /dev/rd/c0d0  or: fdisk /dev/ida/c0d0  (for RAID devices)
  ...
[root@localhost ~]# fdisk的交互式输出是以标准错误的方式输出的,在你的标准输出设备上是不输出的,所以你需要重定向你的标准错误输出.

|
嗯,把标准输出跟错误输出重定向到文件里看看.

|
你的程序死在那里是什么意思?

|
楼主这样做的目的是什么? 是要在程序中格式化硬盘么? 如果是这样,可以不用这么麻烦,有比较简单直接的解决方法!

    
 
 

您可能感兴趣的文章:

  • linux下利用(cat,strings,head,sed)命令生成随机字符串
  • 利用 mount 函数 如何 挂载 ntfs 分区,如何调用(不是命令,是 MOUNT 函数)
  • 什么命令察看网卡的利用率?
  • 高手,我装了Cygwin,有153M,不知道装全了没有,我在命令行敲入gcc,不行,那我该怎么办,才能利用它进行编程?
  • 利用管道实现sudo命令免输入密码的方法
  • 如何利用read命令按行读取一个文件
  • 利用shell命令取得当前系统所有的IPC信息
  • SQL Server利用bcp命令把SQL语句结果生成文本文件
  • 利用linux命令cat, uniq, sort找出file1中存在,file2中不存在的文本行
  • 如何利用time命令对程序进行全面统计——原创
  • linux下利用定时任务执行db2存储过程
  • 等待大侠出手相救,在多线程程序中执行system函数导致CPU利用率不停的增长的问题。
  • 怎样利用html中的超链接来执行一个servlet或者提交该页面上的数据给一个JSP
  • 利用Makefile生成可执行文件的问题
  • ThinkPHP框架任意代码执行漏洞的利用及其修复方法
  • 利用noesis.Javascript开源组件.Net中执行javascript脚本
  • java利用mybatis拦截器统计sql执行时间示例
  • C#利用ScriptControl动态执行JS和VBS脚本
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 急急急,请问如何获得Cpu利用率,可以用libproc.so这个库获取吗?
  • 请问怎么可以计算出比较准确的CPU利用率
  • 利用grep可以取出某个字符所在文本的一行。那么用什么指令取出某字符串呢?例如:
  • 利用grep可以取出某个字符所在文本的一行。那么用什么指令取出某字符串呢?
  • redhat ent 4 u4上,如何象readhat ent3 u6版本那样使用top可以查看每个逻辑CPU的利用率以及运行进程的资源使用情况?
  • 利用cron定期杀死某一进程--可以加分
  • Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
  • 利用可更新ResultSet的updateBinaryStream()可以把图片存到mySql数据库,却不能存到Oracle数据库,怎么办?
  • 利用jQuery实现可以编辑的表格
  • linux c下利用srand和rand函数生成随机字符串
  • 请问:Linux下用C编程计算CPU利用率和内存利用率?
  • Web前端开发如何利用css样式来控制Html中的h1/h2/h3标签不换行
  • 在2003下利用vmware安装了linux,又利用host-only方式上了网,问题如下多谢指点!!!
  • 如何利用libpcap和Python嗅探数据包
  • 大虾 紧急求助!!!!如何求得当前机子的处理器利用率和内存利用率?
  • windows堆栈溢出利用的七种方式
  • 如何利用Bash脚本(利用awksedgrepwc等)来自动修改配置文件
  • 求RADIUS的动态分配IP的问题(利用IPPOOL)
  • iowait和cpu利用率的权衡问题
  • 利用java.net.URLConnection上传文件
  • Qt中利用槽如何来传递参数
  • 浏览器漏洞利用框架 BeEF
  • 怎么样利用Socket进行Java网络编程
  • 请问如何编程获得CPU利用率?(空)
  • 编程语言 iis7站长之家
  • 谁知道linux/unix下利用Schema读取校验xml的开源代码,给一个链接,谢谢!
  • 怎样实现利用fprintf,输出定长字串,位数不足时在左侧填入指定字符填充。。
  • CPU、内存、数据库利用率监控
  • 怎样利用u-boot烧写??
  • 根目录 / 文件利用过高, 啥办法?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3