Mac OSX和Unix快速提问

时间:2010-02-19 09:33:03

标签: c++ perl macos unix

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

  1. 使用Mac OSX编译时,程序以〜开头。如何从启动它的目录开始,或者它只是编译器的一个问题?

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

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

  4. 感谢。

5 个答案:

答案 0 :(得分:3)

  1. 这听起来像Finder正在做的事情。从shell启动应用程序应该按预期工作。
  2. 使用tput
  3. 见上面2的回答。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分: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);

答案 4 :(得分:0)

这可能是一个愚蠢的问题,但为什么要创建一个应用程序来启动perl脚本?只需将以下内容添加到perl脚本的顶部,然后使用“chmod a + x”使其可执行:

#! /usr/bin/perl

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