-
-
[问题已解决][求助]一小段perl代码转换成用c语言来实现
-
发表于: 2012-8-12 21:17 3228
-
先说一下原因,我现在用的一个程序是支持perl脚本开发的,如下面这段代码,是程序提供的perl接口的一个模块中的一段关键段代码,所有脚本中的执行命令都是通过下面这代段码传到主程序中去的,(我猜测是一个管道),我分析这代码的执行过程如下:
一:将STDOUT定为当前默认输出句柄,并保存旧的默认输出句柄
二:将标志"$|"置为1(并保存旧的"$|"值),便于每输出一次,就刷新缓冲区,
三:执行输出print
四:恢复"$|"值
五:恢复当前的默认输出句柄
不知道我分析的对不对,重点是我不知道怎么用C语言去完美实现,
并不是完全不知道,因为我按照这个意思写的接口只能成功执行一次,后面执行时就卡死了,
因为perl我不太熟,我想用C语言写个接口方便用其它语言开发脚本
请大神们帮帮忙
别贴上我转换的代码吧,只能执行一次,如果发送两条指令,第二条就卡死了
一:将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;
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
- [注意]论坛访问非常慢 3232
- [分享]汇编Masm32声明Unicode字串变量工具 8755
- [问题已解决][求助]一小段perl代码转换成用c语言来实现 3229
看原图
赞赏
雪币:
留言: