Mac OSX и Unix быстрые вопросы - PullRequest
1 голос
/ 19 февраля 2010

У меня 3 вопроса. Я делаю исполняемый файл C ++ для запуска программы Perl, которую я сделал. Я скомпилирую его для Winows, Mac OSX и Linux. Это довольно просто: system ("perl progam.pl");

  1. При компиляции с Mac OSX программа запускается в ~. Как заставить его запускаться в директории, из которой он был запущен, или это просто проблема с компилятором?

  2. Я использую - echo -n -e "\ 033 [0; Программа \ 007" - при попытке сделать заголовок окна "Программа". Это лучший способ?

  3. Я использую - echo -n -e "\ 033 [7; 30; 47m" - чтобы сделать фон окна черным. Это лучший способ?

Спасибо.

Ответы [ 5 ]

3 голосов
/ 19 февраля 2010
  1. Похоже, что Finder делает. Запуск приложения из оболочки должен работать так, как вы ожидаете.
  2. Использование tput
  3. См. Ответ на 2 выше.
0 голосов
/ 21 февраля 2010

Это, наверное, глупый вопрос, но почему вы делаете приложение для запуска Perl-скрипта?Просто добавьте следующее в начало вашего Perl-скрипта и используйте «chmod a + x», чтобы сделать его исполняемым:

#! /usr/bin/perl

Когда вы используете системную команду из C и C ++, вы в основном запускаете стандартсистемная оболочка и выполнение данной команды в этой оболочке.Это не очень удобно и в некоторой степени противоречит цели использования C или C ++ (поскольку вы можете просто создать сценарий оболочки, который делает то же самое).Если вы действительно хотите сделать это с C ++, вам, вероятно, следует использовать popen или fork + exec для запуска perl.Вообще говоря, конечным пользователям не очень удобно играть со своим Терминалом так, как вы предлагаете;большинство пользователей по умолчанию имеют Терминал, настроенный для отображения последней выполненной команды или их текущего каталога, или какой-либо другой информации по их выбору, и изменение, которое - в системах UNIX, таких как Mac OS X и Linux - считается неподходящим этикетом,Однако, если вы пытаетесь создать интерфейс терминала, возможно, вы захотите взглянуть на библиотеку curses.

0 голосов
/ 19 февраля 2010

Для # 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 голосов
/ 19 февраля 2010

На # 1 вы можете ссылаться на текущий каталог с помощью ./ so system ("perl ./progam.pl");следует сделать это, если оба сценария находятся в одной папке.../program.pl будет на один уровень выше.

0 голосов
/ 19 февраля 2010
  1. В Mac OS / Unix, вызов system не изменяет текущий рабочий каталог. При выполнении program.pl текущий рабочий каталог тот же, из которого вы выполнили исполняемый файл C ++. Когда вы запускаете исполняемый файл с помощью Launch Services (например, Finder), рабочий каталог должен быть /.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...