首页
社区
课程
招聘
[问题已解决][求助]一小段perl代码转换成用c语言来实现
2012-8-12 21:17 2785

[问题已解决][求助]一小段perl代码转换成用c语言来实现

2012-8-12 21:17
2785
先说一下原因,我现在用的一个程序是支持perl脚本开发的,如下面这段代码,是程序提供的perl接口的一个模块中的一段关键段代码,所有脚本中的执行命令都是通过下面这代段码传到主程序中去的,(我猜测是一个管道),我分析这代码的执行过程如下:
一:将STDOUT定为当前默认输出句柄,并保存旧的默认输出句柄
二:将标志"$|"置为1(并保存旧的"$|"值),便于每输出一次,就刷新缓冲区,
三:执行输出print
四:恢复"$|"值
五:恢复当前的默认输出句柄

不知道我分析的对不对,重点是我不知道怎么用C语言去完美实现,
并不是完全不知道,因为我按照这个意思写的接口只能成功执行一次,后面执行时就卡死了,
因为perl我不太熟,我想用C语言写个接口方便用其它语言开发脚本
请大神们帮帮忙

    local $commandType = shift;
    local $command = shift;
    local $old_select = select (STDOUT);

    local $flush_status = $|;            # save the flushing status
    $| = 1;                # force flushing of the io buffer
    print $DIR_PREFIX, "$commandType $command\n";    
    #这里print应该是将我们的脚本中的命令发送给主程序去执行
    $| = $flush_status;              # restore the original flush status
    select ($old_select);  


别贴上我转换的代码吧,只能执行一次,如果发送两条指令,第二条就卡死了
  DWORD dwRead,dwWritten; 
  BOOL fSuccess; 
  HANDLE hStdout; 

                hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
  // Write to standard output. 
  ZeroMemory(commandBuf,sizeof(commandBuf));
  strcpy(commandBuf,"@%#%@");
  strcat(commandBuf,commandType);
  strcat(commandBuf," ");
  strcat(commandBuf,command);
  strcat(commandBuf,"\n");
  dwWritten=0;
  dwRead=strlen(commandBuf)+1;
  fSuccess = WriteFile(hStdout, commandBuf, dwRead, &dwWritten, NULL); 
  if (! fSuccess) 
    return 0;

  return TRUE;

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回