![](/img/trans.png)
[英]What's the difference between puts and printf in C compiled into Assembly language
[英]Does running a compiled C file in Ruby capture C's printf()?
我正在使用ruby-2.2.2(在Windows上,使用MinGW和UnixUtils),并且正在编写一个脚本,该脚本将编译,运行和比较.c文件的输出,并且遇到了我尝试尝试的问题执行最近编译的C源文件。
C文件很简单:
#include <stdio.h
int main() {
printf("hello world.");
return 0;
}
在我的ruby文件中,我从类的内部方法运行。
def makeAndTest(filename)
# code which removes any pre-existing .exe file not included
compileResult = `gcc -O3 -o %s %s.c` % [filename, filename]
if (!$?.success?)
return
end
fileCall = `.\%s.exe` % filename
puts fileCall
end
该文件可以很好地编译,但是我进行的实际文件调用没有任何输出。 为了进行健全性检查,我运行了诸如“ ls”之类的简单命令,并且按system()调用的预期输出了输出。 但是,诸如“ echo 23132”之类的命令无法按预期工作-实际上,Ruby只是不为echo调用或可执行文件打印任何内容。
我已经尝试使用system(),%x()和反引号来尝试这些调用,但是我似乎永远都无法获得任何输出。 这已经导致我相信,红宝石必须做一些与我的文件标准输出,对不对? 我可以运行“ echo 23132”或从cmd执行文件,但是ruby似乎失败了。
如果我检查$ ?.成功吗? 在每次调用之后,似乎两个调用都失败了(但是简单的ls调用成功了)。
有谁知道这里可能会发生什么? Ruby如何处理它运行的文件的标准输出? 在我看来,Ruby能够运行已编译的.exe,因此不了解此处可能会发生什么。
如果您的呼叫失败,请尝试通过将stderr的输出重定向到stdout来打印输出
output = `echo 12345 2>&1`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.