mobile CCTV,mobile surveillance,police body worn cameras

 forgetPW
 registerNow
search
view: 1534|reply: 0
打印 prevThread nextThread

ZT:管道实现 passwd 交互的问题 @2009

[copyURL]

13

主题

373

帖子

2023

积分

vipMem

Rank: 6Rank: 6

积分
2023
jumpTo
owner
poston 2015-11-12 11:14 | authorOnly 回帖奖励 |倒序浏览 |阅读模式
eminem112
  
  
  等级:论坛游民
  文章:27
  积分:553
  注册:2009-1-20

  鲜花(0)  鸡蛋(0)
[url=][/url]            楼主
管道实现 passwd 交互的问题
可以使用 管道调用 passwd命令 输入参数,更改密码。
但是不能得到passwd的返回结果,这怎么知道我的密码修改成功了。。。
头大了。
问题:
管道======》passwd (已经成功了)
管道《======passwd(怎么做????)
2009-2-15 13:15:43

  
  huangning
  
  
  等级:超级版主
  文章:1468
  积分:3269
  注册:2007-6-6
[url=][/url]             2

呵呵,先不看返回值,直接在本机登录一下看看密码改对了没有就知道啦。
2009-2-15 13:50:24

  
  eminem112
  
  
  等级:论坛游民
  文章:27
  积分:553
  注册:2009-1-20
[url=][/url]            3

能改密码,本机试过了。
但是没返回值,无法判断是否成功。。
我的相关代码:
#include <stdio.h>
int main()
{
int i;
      FILE* pfPass1 = popen( "/usr/bin/passwd --stdin eminem112", "w" );
      FILE* pfPass2 = popen( "/usr/bin/passwd ", "r" );

if( NULL == pfPass1 || NULL == pfPass2 )
        {
         printf("error");
         return -1;
        }
      const char* lp[2] = {"**********\n","***********\n"};
      char* lq;
      for( i = 0; i < 2; i++ )
      {   
          sleep(2);
          printf(" %s ",lp  );
          fputs( lp, pfPass1 );
//        fgets( lq,128, pfPass2 );
//        printf(" %s ", *lq );
       }
         pclose( pfPass1 );
         pclose( pfPass2 );
}

2009-2-15 14:15:46

  
  eminem112
  
  
  等级:论坛游民
  文章:27
  积分:553
  注册:2009-1-20
[url=][/url]            4

这样不就
不能在界面上打出修改成功的提示对话框了吗??
2009-2-15 14:17:50

  
  eminem112
  
  
  等级:论坛游民
  文章:27
  积分:553
  注册:2009-1-20
[url=][/url]            5

修改肯定成功了:
passwd : all authentication tokens updated successfully.
2009-2-15 14:22:00

  
  ldpsl
  
  
  等级:新手上路
  威望:5
  文章:8
  积分:294
  注册:2008-8-26
[url=][/url]            6

#include <stdio.h>

int main(int argc, char *argv[])
{
    char buf[128];
    FILE *pp;

    if( (pp = popen("ls -l", "r")) == NULL ){
        printf("popen() error!\n");
        exit(1);
    }
    while(fgets(buf, sizeof(buf), pp)){
        printf("%s", buf);
    }
    pclose(pp);
    return 0;
}

2009-2-15 14:54:56

  
  eminem112
  
  
  等级:论坛游民
  文章:27
  积分:553
  注册:2009-1-20
[url=][/url]            7

ldpsl兄
请问 popen("ls -l", "r")
是什么意思??
我看不太懂
2009-2-15 15:17:53

  
  eminem112
  
  
  等级:论坛游民
  文章:27
  积分:553
  注册:2009-1-20
[url=][/url]            8

  popen("ls -l", "r")
我只知道 ls -l 是调用passwd的
但是ls -l 能回显出我更改密码后的成功提示吗??
我试试
谢谢指导。
2009-2-15 15:20:27

  
  huangning
  
  
  等级:超级版主
  文章:1468
  积分:3269
  注册:2007-6-6
[url=][/url]             9

就是执行ls -l啊。
2009-2-15 15:20:45

  
  eminem112
  
  
  等级:论坛游民
  文章:27
  积分:553
  注册:2009-1-20
[url=][/url]            10



谢谢  ldpsl 和BOSS
我知道你们的意思了。
只要返回不为空,就是验证了密码修改正确了。
不过还是不能直接用管道调用 passwd 返回我想要的消息:
<<<passwd : all authentication tokens updated successfully.>>>
标个记号,下次解决这个问题。


reply

使用道具 report

creditRule

QQ|wireless surveillance

GMT+8, 2024-4-24 03:38 , Processed in 0.080081 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

QuickReply backToTop BackToList