Linux Exec от C ++ - PullRequest
       3

Linux Exec от C ++

0 голосов
/ 28 декабря 2011

Я пытаюсь отправить электронное письмо с помощью команды mail в linux c ++, но execl вызывает ошибки.

Как мне отправить эту команду с exec?

/ bin / echo llol | / usr / bin / mail -s "testt" myemail@email.com

Спасибо.

Вот код:

void AppConfig::sendEmail(string to, string subject, string body)
{
    stringstream ss;

    ss << "/bin/echo " << body << " | /usr/bin/mail -s \"" << subject << "\" " << to;
    cout << ss.str();
    cout << "rofl";
    errno = 0;
    int ret = execl(ss.str().c_str(), "", (char*) 0);
    cout << "ret=" << ret << " errno=" <<errno;
}

Я получаю errno = 2 (каталог не найден).

Ответы [ 4 ]

4 голосов
/ 28 декабря 2011

Вы, вероятно, хотите использовать system () вместо execl ().

system("/bin/echo llol | /usr/bin/mail -s "testt" myemail@email.com");
2 голосов
/ 28 декабря 2011

Поскольку вы хотите транслировать текст в выполняемый вами процесс, вам может быть лучше использовать popen (). Это устранит необходимость в echo, и вы можете просто использовать popen () / usr / bin / mail.

http://pubs.opengroup.org/onlinepubs/009604499/functions/popen.html

0 голосов
/ 28 декабря 2011

Вы также можете использовать функцию popen из C, очень хорошо работает с C ++.

0 голосов
/ 28 декабря 2011

Я думаю, | работает только на таких оболочках, как csh, sh или bash. Поэтому вам необходимо заключить эти команды в bash сценарий или выполнить перенаправление ввода / вывода в C ++. Я бы порекомендовал первое. Это намного проще. Если вы хотите использовать последнее, взгляните на команду pipe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...