2010-02-19 42 views
1

我有3个问题。我正在制作一个C++可执行文件来启动我制作的Perl程序。我将为Winows,Mac OSX和Linux编译它。这几乎就是:system(“perl progam.pl”);Mac OSX和Unix快速问题

  1. 使用Mac OSX编译时,程序以〜开头。我怎样才能让它从它启动的目录开始,还是只是编译器的问题?

  2. 我正在使用echo -n -e“\ 033 [0; Program \ 007” - 试图制作窗口标题“程序”。这是最好的方法吗?

  3. 我正在使用-echo -n -e“\ 033 [7; 30; 47m” - 使窗口的背景变黑。这是最好的方法吗?

谢谢。

回答

3
  1. 这听起来像Finder正在做的事情。从shell启动应用程序应该可以按照您的预期工作。
  2. 使用tput
  3. 请参阅上述2的答案。
+0

仅适用于Mac OSX?我会用什么Linux类系统? – 2010-02-19 09:44:35

+0

当然你会使用'tput'。 http://linux.die.net/man/1/tput – 2010-02-19 09:53:25

+0

对不起,这种回应迟了(我周末不在),但我不完全明白如何改变标题或背景颜色的Terminal ... – 2010-02-22 07:11:59

0
  1. 在Mac OS/Unix下,调用system不改变当前的工作目录。执行program.pl时,当前工作目录与执行C++可执行文件的目录相同。当您使用启动服务(例如Finder)启动可执行文件时,工作目录应为/
0

在#1上,您可以使用./so system(“perl ./progam.pl”)引用当前目录。应该这样做,假设两个脚本都坐在同一个文件夹中。 ../program.pl会更高一级。

0

#1,使用GETCWD &然后传递一个明确的路径,以系统:

cwd=getcwd(NULL, PATH_MAX); 
sprintf(cmd, "perl %s/program.pl", cwd); 
system(cmd); 
free(cwd); 

如果你的Perl程序本身依赖于特定的工作目录,然后执行此相反:

sprintf(cmd, "cd %s && perl program.pl", cwd); 
0

这可能是一个愚蠢的问题,但你为什么要创建一个应用程序来启动一个Perl脚本?只需添加以下到您的Perl脚本顶部和使用“CHMOD一个+ X”,以使其可执行:

 
#! /usr/bin/perl 

当您使用从C和C++系统命令,你基本上启动默认的系统shell并在该shell中执行给定的命令。这样做不是非常轻便,并且有些失败了使用C或C++的目的(因为您可以简单地创建一个执行相同操作的shell脚本)。如果你想用C++来实现,你应该使用popenfork + exec来启动perl。一般来说,终端用户以你提出的方式玩他们的终端并不好,大多数用户在默认情况下会将终端配置为显示最近执行的命令或其当前目录或他们选择的一些其他信息,并且在UNIX系统(如Mac OS X和Linux)上将其更改为不正确的礼节。但是,如果您尝试创建终端界面,则可能需要查看curses库。