2010-02-19 85 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庫。