Показано с 1 по 1 из 1
-
24.09.2007, 20:13 #1
- Регистрация
- 24.09.2007
- Сообщений
- 1
- Сказал(а) спасибо
- 0
- Поблагодарили 0 раз(а) в 0 сообщениях
Помогите с консольной прогой
Итак, есть С++ прога, которую хочется запустить как CGI:
using namespace MagickLib;
#include <wand/MagickWand.h>
#include <cstring>
std::string filePath="sample.gif";
MagickWandGenesis();
MagickWand *sourceImages, *coalescedImages, *resImages;
sourceImages = NewMagickWand();
coalescedImages = NewMagickWand();
resImages = NewMagickWand();
MagickBooleanType status;
status=MagickReadImage(sourceImages, filePath.c_str());
if(status==MagickFalse) Warning("Error. Can't read image", 1);
coalescedImages = MagickCoalesceImages(sourceImages);
int i=0;
MagickBooleanType whileFlag = MagickTrue;
PixelWand *textColor;
textColor=NewPixelWand();
double stringColors[3];
Line::GetStringColor(stringColors);
PixelSetRed(textColor, 1);
DrawingWand *drawString;
drawString=NewDrawingWand();
DrawSetStrokeColor(drawString, textColor);
DrawSetFillColor(drawString, textColor);
DrawAnnotation(drawString, 5, 50, (const unsigned char*)("Test - Тест"));
while(whileFlag){
MagickDrawImage(coalescedImages, drawString);
//MagickResizeImage(coalescedImages, 200, 50,LanczosFilter,0);
whileFlag=MagickNextImage(coalescedImages);
i++;
}
//std::cout << "Content-type: text/html\r\n\r\n";
//std::cout<<i<<"\n";
unsigned char *out;
size_t *outLength;
std::cout<<"Before write function - all is okay!\n";
std::fflush(stdout);
std::freopen("stdout.txt", "w", stdout);
std::freopen("stderr.txt", "w", stderr);
out = MagickGetImageBlob(coalescedImages,outLength);
std::cout<<"After write function - all is okay!\n";
std::fflush(stdout);
std::fflush(stderr);
MagickWandTerminus();
Компилятор g++ не ругается, прога из под консоли запускается и успешно работает. НО в режиме CGI не работает. Заголовки выводит - всё как надо. Но как доходит до строчки MagickGetImageBlob(...) - процесс завершается. Причём нет следов ни в логах ни в стандартном выводе (который я уже от отчаянья перенаправил в файлы). Если строчку MagickGetImageBlob(...) закомментировать - прога запускается как CGI и работает до конца.
Процесс лист во время исполнения CGI выглядит примерно так:
PID TT STAT TIME COMMAND
4223 И SN 0:00,06 sshd: u51990@ttyp0 (sshd)
45775 И S 0:00,04 /usr/local/apache-php5/bin/suexec u51990 u51990 cgi line
45778 И R 0:00,01 line
4227 p0 SNs 0:00,05 -bash (bash)
45880 p0 RN+ 0:00,00 ps ax
КОРОТКО: чем так отличается запуск приложения как CGI, что одна конкретная строчка вылетает прогу без ошибок?
Социальные закладки