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

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

Восстановить пароль Регистрация
 
Kirill33
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 6
07.08.2012, 13:37     C++, Разделяемая память и apache CGI #1
Что есть.
Есть машина с 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 Не знал в какой раздел написать - написал сюда на всякий случай
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2012, 13:37     C++, Разделяемая память и apache CGI
Посмотрите здесь:

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

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

Текущее время: 08:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru