The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"типа как сервис под windows"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"типа как сервис под windows" 
Сообщение от Apolon emailИскать по авторуВ закладки on 23-Май-05, 13:44  (MSK)
Всем привет. Должен написати проу под FreeBSD. Надо запустить прогу с СД, винта на компе нету. Как ее сделать чтобы она роботала в памяти и реогировалв на командную строку ? .
Например
1. запустил роугу с СД
2. proga arg1 arg2 // чтота сделала
3. proga arg1 arg2 arg3 // чтота сделала
4. proga /exit // закрывается прога
Спосибо.
  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "типа как сервис под windows" 
Сообщение от harlan Искать по авторуВ закладки(ok) on 24-Май-05, 07:46  (MSK)
>Всем привет. Должен написати проу под FreeBSD. Надо запустить прогу с СД,
>винта на компе нету. Как ее сделать чтобы она роботала в
>памяти и реогировалв на командную строку ? .
>Например
>1. запустил роугу с СД
>2. proga arg1 arg2 // чтота сделала
>3. proga arg1 arg2 arg3 // чтота сделала
>4. proga /exit // закрывается прога
>Спосибо.

К сожалению, орфографические ошибки сожрали часть смысла, но попробую ответит.
Если тебе надо, что бы программа была доступна с CD во время работы ОС на бездисковой станции, то
1. подмонтируй CD и вызывай прогу с неё.
2. Можно ещё создать RAM-диск, подмонтировать его, скопировать прогу с CD на него, а потом из шела вызывать эту прогу как с обычного раздела.
3. Пишешь серверную часть, которая крутится в памяти, и клиента (proga), которfz обращается к серверу и управляет им. Но вызываться она будет как в первых двух вариантах.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "типа как сервис под windows" 
Сообщение от Apolon emailИскать по авторуВ закладки on 24-Май-05, 09:39  (MSK)
Вопрос какраз в том, как написать программу которая крутится в памяти ? и обращатся к етои программе напрямую через командную строку. Под unix не програмировал ниразу.
Может есть где-то примерчик ?
Если по подробнее, то прога состоит в следующим :
1. к порту лпт подключены 8 лампочек
2. прога должна уметь выключить одну или несколько из них на определеное время, например по команде proglpt off 1,30 4,50   что означает выключить 1 на 30s и 4 на 50s
3. должна быть возможность прервать команду off, тоесть включить все лампочки не дождавшись окончания времени
4. должна быть возможность посмотреть сколько времени осталось до включения лампочек если они были выключены на время

HDD на компе нету, а CD не всегда будет в CD-ROM-е.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "типа как сервис под windows" 
Сообщение от MaximKuznetsov Искать по авторуВ закладки on 24-Май-05, 10:41  (MSK)
как я понял, получается 2 программы
1 - демон, который непосредственно управляет лампочками,
2 - клиент который понимает запросы пользователя и на своём птичьем
языке передает их в 1.
По поводу коммуникаций между 1 и 2 посмотри ipc/msgq - наиболее простой вариант.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "типа как сервис под windows" 
Сообщение от Apolon emailИскать по авторуВ закладки(ok) on 24-Май-05, 11:32  (MSK)
>как я понял, получается 2 программы
>1 - демон, который непосредственно управляет лампочками,
>2 - клиент который понимает запросы пользователя и на своём птичьем
>языке передает их в 1.
>По поводу коммуникаций между 1 и 2 посмотри ipc/msgq - наиболее простой
>вариант.

Може я чтото не правельно обиясняю, или не понимаю. Допустим есть такой пример

#include <stdio.h>
#include <fcntl.h>
#include <machine/cpufunc.h>
int main(int argc,char* argv[])
{
int val,port;
int fd;
if(argc<3){fprintf(stderr,"usage: %s port value\n",argv[0]); exit(1);}
if(sscanf(argv[1],"0x%x",&port) && sscanf(argv[2],"0x%x",&val))
{
  fd=open("/dev/io",O_RDWR);  
  if(fd==-1){perror("open");exit(1);}
  outb(port,val);
  close(fd);
}
else
{
  fprintf(stderr,"port and value must be in hex format with 0x
  prefix\n"); exit(1);
}
}
компилируем:
# gcc outb.c -o outb
запускаем:
# ./outb 0x3f2 0x10  лампочка дисковода загорелась
# ./outb 0x3f2 0x0   потухла
Как я понимаю, при каждом # ./outb 0x3f2 0x10 прога загружается с винта в память, делает свою работу и умерает, а мне надо чтобы прога находилась в памяти всегда, пока я ее не убию, и при каждой команде # ./outb 0x3f2 0x10 чтобы OS не искала прогу на винте или на других дисках для запуска, а прога делала б свое дело и ждала бы следующею команду.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "типа как сервис под windows" 
Сообщение от adi Искать по авторуВ закладки(??) on 25-Май-05, 17:01  (MSK)
1. Делим программу на 2 части: клиент и сервер
2. Выбираем схему связи между клиентом и сервером (Unix Socket, Share memory etc.)
3. Для сервера делаем так:
int main(int argc, char** argv) {
    pid_t pid;
    pid = fork();
    if (pid == 0) {
      setsid();
      chdir("/");
      close(0);
      close(1);
      close(2);
      for (;;) {
          /* Основной цикл работы программы */
      }
    }
}
4. Пишем клиента.


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру