Tag: perl

动态生成变量名称

我只想知道当前编程语言中是否有任何方法可以动态生成像数组这样的变量名称,例如。 for(i=1;i<10;i++) { int a i = ; printf(“the value generated in the logic is %d”,a i); } 我知道有一个类似的方式的数组的概念,但我只是想知道这是否存在于任何编程语言中。 提前致谢….

在C中:在单行文本文件中读取时分配变量

我是一名初学者。 我一直在学习C,Fortran和Perl。 我的目标是创建一个包含曲面图的网页。 我可以让我的程序进行通信以完成这项工作,但是在我的C程序中分配我的变量时遇到了问题。 从我的Perl程序中,我得到一个文本文件, data.in只包含一行。 例如: cosxtsiny 50 0.5 3 0 6 。 这就是我所做的: (将我的变量声明为char , int或double ) FILE *fi fi = open(“data.in”, “r”); fscanf(fi, “%s %d %f %f %f %f”, &func, &PTS, &xxa, &xxb, &yyc, &yyd); close(fi); 我应该生成一个文件data.out ,其中包含我从data.in得到的值,一旦我用它做了一些计算。 这些将在以后为我生成表面图。 这是我的问题:我得到一个具有正确数量的网格图(PTS)的曲面图,所以我知道前两个任务是正确的,但我的轴是关闭的。 当我看到我的data.out ,我的轴不会开始和结束它们应该的位置。 有什么建议?

模拟流数据

我正在尝试编写一个程序,它将从平面数据文件中读取并模拟流式传输,这样我就可以测试一个读取流数据的程序,而无需连接和启动流式硬件。 有哪些更现实的方法可以实现这一目标? 我需要它以可变速度流,这取决于我模拟的硬件。 到目前为止,我的两个想法是写入命名管道的程序,或者以我需要的速率写入虚拟串行端口的程序。 是否有更好(更现实)的模拟流数据的方式?

为什么在perl脚本更改的C包装器的setgid-bit时@INC会发生变化?

这完全在RHEL6上 我试图将perl脚本作为特定用户(perl脚本的所有者)运行,方法是将其包装在C二进制文件中,然后设置二进制文件的setgid位(参考: https : //superuser.com/questions/440363/ can-i-make-a-script-always-execute-as-root )。 perl脚本使用各种perl模块。 如果perl模块在试图运行C二进制文件的帐户的PERL5LIB中,并且未在C二进制文件上设置setgid-bit,则运行正常。 如果设置了setgid-bit,那么它会失败,因为使用的perl模块不在@INC中。 一些代码用于演示@INC如何随粘性位改变… the.pl #!/usr/bin/env perl print “Size of INC: “.scalar(@INC).”\n”; exit; wrapper.c #include #include #include int main(int argc, char *argv[]) { exit(execvp(“/home/me/the.pl”,(char **)argv)); } perl脚本权限是-rwxrwxr-x 当我将包装器的权限设置为-rwxr-xr-x时(注意未设置setgid位),然后从其他帐户运行二进制文件,我得到… Size of INC = 87 …这是我所期望的(PERL5LIB中有87个元素)。 但是当我将包装器的权限设置为-rwxr-sr-x时(注意setgid位已设置),然后从其他帐户运行二进制文件,我得到… Size of INC = 4 即使我在perl脚本的所有者和运行包装器的帐户的.cshrc中加载​​所有87个元素的PERL5LIB,我也会得到相同的结果。 我需要运行二进制文件作为perl脚本的所有者,因为该帐户具有用户帐户所没有的priv。 root用户不是任何一个玩家。 为什么我会丢失那些PERL5LIB元素? 有没有办法解决这个问题? 提前致谢!

使用Perl的ExtUtils :: MakeMaker,如何使用与我的XS模块相同的设置编译可执行文件?

给定一个使用C库的Perl XS模块,假设有一个正确设置的Makefile.PL,以便所有头和库位置,编译器和链接器标志等都能正常工作。 现在,假设我想在所述XS模块中包含一个小型C程序,该模块使用相同的底层C库。 什么是正确的,独立于平台的方式来指定目标可执行文件,以便使用相同的设置和标志构建它? 如果我做以下事情 sub MY::postamble { return <<FRAG; target$Config{exe_ext}: target$Config{obj_ext} target$Config{obj_ext}: target.c FRAG } 我没有得到那些包含位置,库列表等我在WriteMakefile的参数中WriteMakefile 。 如果我开始手动编写规则,我必须考虑至少make , dmake和nmake 。 如果使用ExtUtils :: CBuilder,我无法想出指定要链接的库的直接方法。 我肯定错过了什么。 如果你能指出来,我将不胜感激。

嵌入式perl in C,perlapio – 与STDIO的互操作性

我刚刚意识到,PerlIO层似乎不仅仅(或多或少)能够轻松地包装stdio.h函数。 如果我尝试使用通过PerlIO_stdout()解析的PerlIO_stdout()和使用stdio.h中的函数的PerlIO_stdout() , PerlIO_fileno()失败。 例如: PerlIO* perlStdErr = PerlIO_stderr(); fdStdErrOriginal = PerlIO_fileno(perlStdErr); relocatedStdErr = dup(fdStdOutOriginal); _write(relocatedStdErr, “something”, 8); //<– this fails 我用VC10尝试过这个。 嵌入式perl程序是从不同的上下文执行的 – 因此不可能在执行对relocatedStdErr的写入的上下文中使用PerlIO。 对于好奇:我需要执行一个perl脚本并将脚本的stdout / stderr的输出转发到日志,同时保持为stdout写自己的能力。 此外,这应该工作平台独立(Linux,Windows控制台应用程序,win32桌面应用程序)。 只是转发stdout / stderr在Win32桌面应用程序中不起作用,因为没有;) – 你需要使用perl的stdout / stderr。 需要的解决方案:能够在perlio派生的文件句柄(或描述符)上使用PerlIO堆栈进行写入。 编辑 – 我的解决方案: 正如Story Teller指向PerlIO_findFILE,这就是诀窍。 所以这里是代码的摘录 – 请参阅内部的注释以获取描述: FILE* stdErrFILE = PerlIO_findFILE(PerlIO_stderr()); //convert to Perl’s stderr to stdio […]

R-Perl安装GCC 4.0的问题:如何删除不必要的-arch标志

我想安装R-Perl模块以在Perl中使用R,但是没有成功使用命令sudo R CMD INSTALL –configure-args=’–with-in-perl’ RSPerl/如下所示: http ://www.omegahat.org/RSPerl/RFromPerl.html 。 我之前发布过有关此问题的信息,并确定我遇到了新的GCC 4.2问题。 但是,我现在正在使用GCC 4.0.1并且遇到了不同的问题。 以下是上述命令的输出: * installing to library ‘/Library/Frameworks/R.framework/Versions/2.13/Resources/library’ * installing *source* package ‘RSPerl’ … checking for perl… /usr/bin/perl No support for any of the Perl modules from calling Perl from R. ***************************************************** Set PERL5LIB to /Library/Frameworks/R.framework/Versions/2.13/Resources/library/RSPerl/perl ***************************************************** Testing: -F/Library/Frameworks/R.framework/.. -framework R Using ‘/usr/bin/perl’ as […]

如何将Perl转换为C?

是否有可用的工具将Perl中的源代码转换为C中的源代码? 任何平台都没问题。

Perl:如何将所有内联C代码放入单独的文件中?

这个问题很简单,我可以感受到RTFM的到来。 但是,我整个上午都在看文档( Inline , Inline-C , Inline-C-Cookbook ),我无法弄清楚如何解决这个问题。 我想使用内联C,但我不希望在与perl代码相同的文件中使用C代码。 (Emacs不喜欢在一个文件中使用两种语言。原则上这是方便的,但实际上我必须在一个文件中编辑我的C然后将其复制粘贴到我的perl脚本中。) 这是工作perl: #!/usr/bin/perl use Inline C => DATA; use strict; use warnings; use List::Util qw(sum); use feature qw(say); my @array = (1..10); say “native perl: “, sum(@array), “, Inline C: “, sum1(\@array); __END__ __C__ double sum1(AV* array) { int i; double sum = 0.0; for (i=0; […]

使用etrace在C ++中按时间顺序跟踪函数调用

背景: 我有一个很大的模拟工具,我需要了解它的逻辑行为。 为了做到这一点,如果我有函数调用的时间顺序,我将得到的大部分帮助,用于最小的工作示例。 我在网上找到了很多工具,比如CygProfiler和etrace 。 在找到解决方案时,我开始变得非常痛苦,我开始遵循使用调试器“步入”的最疯狂的解决方案。 如果你有一个小程序但不是一个完整的模拟工具,这是一个很好的选择。 问题: 我面临的一个问题是上述解决方案最初是针对C ,它们在编译时会生成一个静态文件( *.o )。 另一方面,模拟工具生成共享库( .so )。 我对较低级别的东西知之甚少,所以当我尝试链接它们时,我似乎失败了。 我专门查看了etrace 文档 ,它说: 要了解如何修改ptrace.c以使用动态库,请查看example2目录。 这里的源代码也创建了一个独立的可执行文件,但PTRACE_REFERENCE_FUNCTION宏的定义与动态库一样。 如果查看repo, example和example2文件夹中的文件没有区别。 在example2只有一个额外的.h文件。 另一方面,如果你看一下src/ptrace.c那就说: 在动态库上使用ptrace时,必须将PTRACE_REFERENCE_FUNCTION宏设置为库中函数的名称。 加载时此函数的地址将是输出到跟踪文件的第一行,并允许将其他入口和出口指针转换为其符号名称。 您可以将宏PTRACE_INCLUDE设置为该函数可访问此源文件所需的任何#include指令。 稍微低于评论代码: /* When using ptrace on a dynamic library, the following must be defined: #include “any files needed for PTRACE_REFERENCE_FUNCTION” #define PTRACE_REFERENCE_FUNCTION functionName `*/ 题: 本质上问题如下:如何在动态库中使用etrace ? […]