Запустить команду шелла из программы... (Что курить?)

Модератор: Модераторы разделов

Аватара пользователя
lava
Сообщения: 155
ОС: archer

Запустить команду шелла из программы...

Сообщение lava »

Здравствуйте, уже курил man-ы по C++, форум, google, но уже даже фантазии не хватает - выбирать слова для запроса/поиска.

Есть устройство с флэшпамятью, в которую лин и установлен. Корень подмонтирован как ro.
Есть программа, которая запускается с внешнего диска и вот одна из ее частей отвечает за установку контраста дисплея этого устройства. Но для этого необходимы права rw.
Сейчас программа запускается так:

export...
remount...
./<app>
remount...

Проблема в том, что запись нужна редко, но необходима, а проектные сроки работы программы - месяцы.
Соответственно, такое монтирование - к черту - необходимо перенести remount или вызов соотв. скрипта прямо в программу.

Я нашел семейство exec*, но они в случае успеха не возвращают управление в программу и, соответственно, убивают ее.

Подскажите, какую функцию курить.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Запустить команду шелла из программы...

Сообщение Zeus »

lava писал(а):
05.04.2006 16:20
Подскажите, какую функцию курить.

Может быть это:

#include <stdlib.h>

/* Execute the given line as a shell command. */
extern int system (__const char *__command) __THROW;
Спасибо сказали:
Аватара пользователя
Jan2ary
Бывший модератор
Сообщения: 630
Статус: Тщедушный очкарик

Re: Запустить команду шелла из программы...

Сообщение Jan2ary »

А почему такое монтирование к черту? Чем принципиально отличается?
Не шалю, никого не трогаю, починяю примус...
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Запустить команду шелла из программы...

Сообщение d_Sun »

fork() -> exec()

Упс... Дочитал до конца... :)

man 2 mount. А что за проект? Мне жаль вашего заказчика... :)
Моя подпись сильно длинная :)
Спасибо сказали:
Аватара пользователя
lava
Сообщения: 155
ОС: archer

Re: Запустить команду шелла из программы...

Сообщение lava »

(d_Sun @ Apr 5 2006, в 15:46) писал(а):Мне жаль вашего заказчика...

Ну блин! Сразу оскорблять. :( Я всего лишь студент (22г, инженер-электроник, который самостоятельно взялся за С++ и Лин, но знающих людей рядом нет) и не могу всего знать...

(d_Sun @ Apr 5 2006, в 15:46) писал(а):man 2 mount

Дык это шелловская функция - именно ею в скрипте и работаю. Вопрос о том, как ее из С++ вызвать.

(Jan2ary @ Apr 5 2006, в 15:45) писал(а):А почему такое монтирование к черту?

Да просто получится, что система изначально для безопасности/стабильности подключенная как ro из-за этой проги, в которой запись нужна лишь изредка, будет находиться в rw месяцами.

(Zeus @ Apr 5 2006, в 15:33) писал(а):#include <stdlib.h>
/* Execute the given line as a shell command. */
extern int system (__const char *__command) __THROW;

А вот за это - спасибо. По описанию именно то, что надо. Правда кросс-компилятор слетел: сейчас проверить не могу.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Запустить команду шелла из программы...

Сообщение Zeus »

lava писал(а):
05.04.2006 17:49
(Zeus @ Apr 5 2006, в 15:33) писал(а):
#include <stdlib.h>
/* Execute the given line as a shell command. */
extern int system (__const char *__command) __THROW;

А вот за это - спасибо. По описанию именно то, что надо. Правда кросс-компилятор слетел: сейчас проверить не могу.

Это настолько стандартная функция, что даже в Borland C 3.1 была :)
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Запустить команду шелла из программы...

Сообщение elide »

man 2 mount
Дык это шелловская функция - именно ею в скрипте и работаю. Вопрос о том, как ее из С++ вызвать.
хм... я не хочу сразу начинать никого оскорблять, но если "студент 22г, инженер-электроник" не умеет читать - то это очень и очень плохо.
если ты сам не в состоянии этого сделать, зачитываю man 2 mount вслух:

Код: Выделить всё

MOUNT(2)            Linux Programmer's Manual            MOUNT(2)



NAME
       mount, umount - mount and unmount filesystems

SYNOPSIS
       #include <sys/mount.h>

       int  mount(const  char  *source, const char *target, const
       char *filesystemtype, unsigned long mountflags, const void
       *data);

       int umount(const char *target);

       int umount2(const char *target, int flags);

DESCRIPTION
       mount  attaches  the filesystem specified by source (which
       is often a device name, but can also be a  directory  name
       or a dummy) to the directory specified by target.

       umount  and umount2 remove the attachment of the (topmost)
       filesystem mounted on target.
слава роботам!
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Запустить команду шелла из программы...

Сообщение d_Sun »

lava писал(а):
05.04.2006 17:49
(d_Sun @ Apr 5 2006, в 15:46) писал(а):
man 2 mount

Дык это шелловская функция - именно ею в скрипте и работаю. Вопрос о том, как ее из С++ вызвать.


Не ну вы ман хоть посмотрели? От именно так как я написал - man 2 mount...
Моя подпись сильно длинная :)
Спасибо сказали:
Аватара пользователя
lava
Сообщения: 155
ОС: archer

Re: Запустить команду шелла из программы...

Сообщение lava »

Мда... Опростоволосился. Прошу прощения.

1. Пост elide за оскорбления и не думал воспринимать - сам заслужил - сам получил. (Первый раз просто про то, что заказчикам не повезло - я же не один работаю);
2. На man 2 mount надо было действительно посмотреть - что я сейчас и сделал.Тупо не знал, что есть другие страницы манов.
3. Еще курить мне и курить. Но в том-то и дело что я только начинаю. Спасибо за помощь. Ухожу в раздумья.
Спасибо сказали: