Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kirill33
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 6
#1

Разделяемая память и apache CGI - C++

07.08.2012, 13:37. Просмотров 774. Ответов 3
Метки нет (Все метки)

Что есть.
Есть машина с windows 7 и апачем на борту. Так же есть программа А, написанная на c++, которая в разделяемую память кладет данные.

Что надо.
Необходимо чтобы через web интерфейс отображалось содержимое разделяемой памяти.

Что получилось.
Написана программа Б в VS для теста, со следующим кодом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
 
HANDLE fd;
void *bbuf;
 
int _tmain(int argc, _TCHAR* argv[]) {
    printf("Content-type: text/html\n");
    printf("Pragma: no-cache\n");
 
    printf("<html><body>");
 
    fd = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE, FALSE, "/test");
    if(fd) {
        bbuf = (unsigned char *)MapViewOfFile(fd, FILE_MAP_READ, 0, 0, 0);
        printf("%s\n", bbuf ? bbuf : "")
        UnmapViewOfFile(fd);
        CloseHandle(fd);
        fd = NULL;
    } else printf("no object in shared memory\n");
   
    printf("</body></html>");
    return 0;
}
При обычном запуске программы, она работает прекрасно. Когда её запускаю в качестве CGI (apache 2.2), она не работает (не видит разделяемую память программы А). Так же пробовал непосредственно в этой же программе класть данные в память и успешно доставать (в качестве CGI работает).

Может ли быть такое, что т.к. apache работает от имени локальной службы (соответственно похоже что программа Б через CGI тоже), а программа А от имени обычного пользователя и из-за этого не видна область разделяемой памяти А из программы Б?

Самый главный вопрос: как данные из разделяемой памяти вывести в браузер?

PS Прошу прощения если я запутанно объяснил проблемку. Не умею я объяснять.
PSS Не знал в какой раздел написать - написал сюда на всякий случай
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2012, 13:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разделяемая память и apache CGI (C++):

Разделяемая память - C++
Добрый день!!! Столкнулся вот с какой проблемой, мне необходимо написать программу крестики-нолики через разделяемую память. А как это...

разделяемая память - C++
Всем привет! подскажите, пожалуйста, как решить такую проблему: У меня есть программа которая открывает 2 консольных окна. есть...

Разделяемая область памяти - C++
Здравствуйте. Нам задали такое задание - написать программку(ки, ибо больше одного запущенного процесса) и запустить, чтобы выполнилось...

CGI и C++ - C++
Решил попросить помощи в объяснении моей курсовой. Всю работу свел к минимуму. Сейчас представлю вам простейший вид того что мне нужно. А...

CGI и C++ - C++
какие книги есть по этой теме,и вообще зачем с++ для веб,и как к всему этому может относиться json??

Cgi скрипт на C++ - C++
Создал простой скрипт на C++ и положил его в cgi-bin не забыл заголовок Content -type , создал на ide microsoft visual провел компиляцию...

3
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
07.08.2012, 14:25 #2
Цитата Сообщение от Kirill33 Посмотреть сообщение
Может ли быть такое, что т.к. apache работает от имени локальной службы (соответственно похоже что программа Б через CGI тоже), а программа А от имени обычного пользователя и из-за этого не видна область разделяемой памяти А из программы Б?
Да, так и есть. При попытке присоединения к shared memory проверяются права доступа, в том числе и uid/gid процессов.
Цитата Сообщение от Kirill33 Посмотреть сообщение
как данные из разделяемой памяти вывести в браузер?
Например, с помощью CGI -- просто вывести содержимое в поток вывода. Что у вас, собственно, и сделано в приведенном выше коде.
Для этого потребуется, чтобы программа А и CGI модуль Б были запущены из под одного пользователя. Под *nix есть модуль апача suEXEC, для Windows самый простой способ -- запустить апач и CGI под тем же пользователем, что и программу А.
1
Kirill33
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 6
07.08.2012, 14:56  [ТС] #3
Цитата Сообщение от lemegeton Посмотреть сообщение
Да, так и есть. При попытке присоединения к shared memory проверяются права доступа, в том числе и uid/gid процессов.

Например, с помощью CGI -- просто вывести содержимое в поток вывода. Что у вас, собственно, и сделано в приведенном выше коде.
Для этого потребуется, чтобы программа А и CGI модуль Б были запущены из под одного пользователя. Под *nix есть модуль апача suEXEC, для Windows самый простой способ -- запустить апач и CGI под тем же пользователем, что и программу А.
Спасибо Проблема была еще и в том, что apache не запускался от имени другого пользователя. Повнимательней посмотрев, понял что имя учетной записи кириллическое, переименовал и всё заработало Дубина я. Проблема решена
0
Kirill33
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 6
15.08.2012, 11:37  [ТС] #4
Сейчас мучаюсь. Апач и программы запущены от одного пользователя. Разделяемую память больше не читает (при исполнении в качестве cgi). Само собой перестало работать. Даже не знаю что делать. Пробовал даже на чистой винде. Если запускать как простое приложение, то видит разделяемую память, а как cgi - не работает код тот же.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2012, 11:37
Привет! Вот еще темы с ответами:

Не выполняеться CGI - C++
Скрипт выполняется из консоли ./cgi2.cgi, но через веb hostname.ru/cgi-bin/cgi2.cgi выдает ошибку. Задача скрипта создать папку в...

Статическая память,Динамическая память. - C++
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные числа. Определить координаты левого нижнего...

Построение проекта на CGI (C++) - C++
Имеет ли смысл полностью отказаться от PHP (или оставить для инклудов CGI-модулей на страницах, где много текста), и заменить все на С++? ...

GET и POST методы CGI скрипта на C++ - C++
Разработать единый CGI-скрипт для обработки запросов, приходящих при заполнении форм по методам GET и POST, возвращающий пользователю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
15.08.2012, 11:37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru