Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Обмен данными через файл  (Прочитано 24854 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Serguntii
Помогающий

ru
Offline Offline

« : 18-02-2014 15:21 » 

 Не знаю насколько это правильно будет. Такая история, нужно сделать обмен между веб сервером и программкой на си.
Думаю сделать так: программа пишет в файл который лежит в корневой папки сервера, из которой скрипт на php берет эти данные и выводит на страницу.
База данных не подходит на компьютере очень мало памяти.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 18-02-2014 15:40 » 

sergeyan, Как правило
1) апач сажается в sendbox.
2) У обычного пользователя как правило нету доступа на запись к папкам  где хранятся скрипты PHP.  

Тебе кстати это для чего? И какая религия не позволяет увеличить память?
« Последнее редактирование: 18-02-2014 15:42 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Serguntii
Помогающий

ru
Offline Offline

« Ответ #2 : 18-02-2014 17:49 » 

Цитата
1) апач сажается в sendbox.
А это как?
Почему нет доступа а если программа будет запускаться под root в автозапуске, проверять наличие файла если нет то создавать файл в папке srv/www с общими правами777  а скрипт будет читать то что там записано и  выводить в html.
Со временем увеличу память, но пока хотелось обойтись без mysql.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 18-02-2014 18:06 » 

Почитай про команду chroot. Раньше это называли Jail, сейчас чаше встречаю Sendbox. Суть в том, что для запускаемой программы создается как бы свое файловое простраство. В случае взлома, взломшик не сможет проникнуть дальше этого файлового пространства. Кстати, насколько я помню у апача свой механизм песочници. Его не нужно запускать с помошью chroot. Нужно только  настроить конфиги.
Чтоб программа не висела постоянно, можно использовать cron.

У тебя кстати могут возникнуть проблемы с SeLinux. Нужно будет настраивать его права также.

Можно кстати использовать sqlight. Он не висит отдельным демоном в памяти. Запускается только по мере надобности.
« Последнее редактирование: 18-02-2014 18:09 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Serguntii
Помогающий

ru
Offline Offline

« Ответ #4 : 18-02-2014 18:48 » 

Правильнее будет использовать базу как промежуточный буфер?
интересно мегабайт 20-30 хватит для sqllite ?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 18-02-2014 19:02 » new

Честно говоря не замерял Улыбаюсь Неужели у тебя нету даже 512 мегов на борту?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Serguntii
Помогающий

ru
Offline Offline

« Ответ #6 : 18-02-2014 19:07 » 

это маленькая плата пк с 64мб озу. И mmcsd 4gb
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 18-02-2014 19:18 » 

Тогда действительно только хардкор Улыбаюсь У Rasberry Pi помоему намного комфортнее условия Улыбаюсь
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Serguntii
Помогающий

ru
Offline Offline

« Ответ #8 : 18-02-2014 19:25 » 

Все работает вроде без проблем осталось только придумать как завязать связь. пока два варианта через файл и через sqllite
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 19-02-2014 05:50 » 

... скрипт на php ...

это маленькая плата пк с 64мб озу. И mmcsd 4gb

На мой взгляд, избавляться надо от PHP, как от безумно жрущей составляющей. А SQLite с файлом на диске и фиксированным размером кеша — более чем правильный выбор.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 19-02-2014 09:08 » 

Может проще на том же C написать программу для CGI-запуска? Никаких "жрущих" PHP не понадобится.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #11 : 19-02-2014 09:11 » 

Может проще на том же C написать программу для CGI-запуска? Никаких "жрущих" PHP не понадобится.
а то и вообще - вызывать через CGI ту самую программку на C с которой предполагалось связываться посредством файла/sqlite, что-бы она сама сразу формировала страничку
Записан
Serguntii
Помогающий

ru
Offline Offline

« Ответ #12 : 19-02-2014 10:15 » 

Через cgi запускать программу это как сделать , если можно пример?
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #13 : 19-02-2014 10:53 » 

Через cgi запускать программу это как сделать , если можно пример?
Это зависит от используемого web-сервера, и операционной системы, вот как советуют для apache в windows:
http://www.codenet.ru/webmast/apache/Apache-WindowsNT/apache_config.php
там есть настройка cgi:
;----------X8
Настройки CGI

Задание псевдонима для каталога с cgi-скриптами "C:\Sites\home\localhost\cgi". При указании пути вида http://localhost/cgi/ или http://localhost/cgi-bin/, Apache будет обращаться к каталогу "C:\Sites\home\localhost\cgi":

...
Напрмер, если вы введете в браузере http://neebet/cgi-bin/cgitest.bat, то будет выполнен код, находящийся в файле "C:\Sites\home\localhost\cgi\cgitest.bat", который также доступен по адресу http://localhost/cgi/cgitest.bat
;----------X8
Если у Вас Linux - то там смысл аналогичный, только пути другие, и, возможно, необходимо будет настраивать selinux или ему подобные механизмы защиты.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 19-02-2014 10:57 » 

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

Но там надо в самом начале - по правилам HTTP - ещё вывести строчки с заголовками. Как минимум Content-Type.

Что касается "как?", то вот даже в Википедии пример есть. Т.е. вопрос непонятен: берёшь поисковик, ищешь CGI и читаешь.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #15 : 19-02-2014 15:56 » 

У CGI есть только 1 минус. Он будет работать с правами apache::apache. Так что, любые действия, требушие root будут игнорироваться. Хотя можно повесить на запускаемый файл стик и сделать его  root::root.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 19-02-2014 16:19 » 

Apache тоже не нужен - зря память ест. Лучше использовать Nginx - расход памяти уложится в 2-3 МБ. Приложение связать через CGI или лучше FastCGI.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #17 : 20-02-2014 10:19 » 

RXL, если сильно ужимать потребление памяти - можно вообще настроить запуск программы через inetd (это если в unix/linux), вообще без всяких web-серверов.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 20-02-2014 16:30 » 

darkelf, протокол обмена? Inetd не предназначен для хоть какой-нибудь нагрузки.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #19 : 20-02-2014 17:02 » 

RXL, без протокола - обратились на порт - получили страничку, сформированную программой. Можно даже в inetd повесить на 80 порт - будет такой себе web-сервер, без протокола http, и выдающий одну страничку.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #20 : 20-02-2014 17:06 » 

Чую, скоро дойдёт до совета самому на сокетах сделать сетевой сервис Отлично
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Serguntii
Помогающий

ru
Offline Offline

« Ответ #21 : 20-02-2014 19:36 » 

Для меня это пока сложно. Попробую  nginx  если получится запустить.
Записан
Serguntii
Помогающий

ru
Offline Offline

« Ответ #22 : 21-02-2014 16:33 » 

Подскажите как  реализовать такой алгоритм.
1Проверить наличие файла, если его нет создать и записать в него строчку 123456789.
Думаю нужен fopen с параметром r,если null вернет тогда  fopen с rw.

2проверить открыт он кем нибудь или нет.
Здесь не знаю что применить.

3Если не открыт открыть для записи и чтения.
Зздесь наверно fopen с rw.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #23 : 21-02-2014 16:49 » 

1. man fopen
Цитата
       r      Open text file for reading.  The stream is positioned at the beginning of the file.
       r+     Open for reading and writing.  The stream is positioned at the beginning of the file.
       w      Truncate file to zero length or create text file for writing.  The stream is positioned at the beginning of the file.
       w+     Open for reading and writing.  The file is created if it does not exist, otherwise it is truncated.  The stream is positioned at the beginning of the file.
       a      Open for appending (writing at end of file).  The file is created if it does not exist.  The stream is positioned at the end of the file.
       a+     Open  for reading and appending (writing at end of file).  The file is created if it does not exist.  The initial file position for reading is at the beginning of the file, but output is
              always appended to the end of the file.

2. И не узнаешь. Можно использовать рекомендательные блокировки (man 2 flock).

3. Нафига? Сперва flock LOCK_EX, потом fopen, потом fclose, потом flock LOCK_UN
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #24 : 21-02-2014 16:56 » 

1) Можно применить функцмю stat. Более конкретная информация по ней man 2 stat.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Serguntii
Помогающий

ru
Offline Offline

« Ответ #25 : 21-02-2014 16:57 » 

В этой программе не хотелось бы блокировать открытие файла.
Файл открывает еще php тоже функцией fopen  если там добавить функцию  блокировки flock LOCK_EX ?
А в этой программе ждать пока php закроет, так получиться?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #26 : 21-02-2014 19:18 » 

sergeyan, ты знаешь задачу или просто что-то хочется? Напиши (прежде всего для самого себя) четкие требования к программе и придерживайся их, а не "хотелось бы" и "наверно".

Чтение документации — полезный навык  Еще давным давно...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Serguntii
Помогающий

ru
Offline Offline

« Ответ #27 : 22-02-2014 07:15 » 

Четкие не получается, постоянно хочется сделать что нибудь лучше, а когда сделаешь видишь что можно было сделать еще лучше.
Сейчас задача такая программа на си открывает файл ,читает,пишет в него, интерпретатор php тоже самое делает.
Задача не дать им одновременно читать и писать. Если программа на си читает и пишет интерпретатор ничего не делает, как файл освобождается он может прочитать и записать его, и тоже самое с программой на си.
Уже посоветовали flock он и php есть,  может еще какие есть рекомендации? 
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #28 : 22-02-2014 08:33 » 

Только четкие требования! Это ТЗ (техническое задание). Программист — не «свободный художник», это инженерная профессия.
Например: «нужна программа, загружающая файл, заменяющая в нем большие буквы на маленькие и сохраняющая в другой; целевая платформа — консоль Linux RHEL6». Отсюда выбирается допустимый для заказчика язык, версии библиотек, инструментарий.


Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Serguntii
Помогающий

ru
Offline Offline

« Ответ #29 : 22-02-2014 08:52 » 

Нет не соглашусь программисты очень творческие люди, у художника всего 3 цвета и кисточка у программиста огромное количество команд из которых он может творить всякие полезные штуки. Заказчиков нет , для самообразования делаю, для себя.  
Сделать нужно поочередный доступ двух программ к одному файлу.
Цитата
Сейчас задача такая программа на си открывает файл ,читает,пишет в него, интерпретатор php тоже самое делает.
Задача не дать им одновременно читать и писать. Если программа на си читает и пишет интерпретатор ничего не делает, как файл освобождается он может прочитать и записать его, и тоже самое с программой на си.
Про flock сейчас читаю его почему то не рекомендуют использовать.
« Последнее редактирование: 22-02-2014 09:09 от sergeyan » Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines