2013-08-24 6 views
0

작동중인 procmail 구성이 있습니다.
이는 rc.filters입니다 :콘텐츠를 C++ 실행 파일로 파이프 할 때 procmail이 이상하게 작동 함

:0 w :a.lock 
* ^From:(.*\<)?([email protected]\.com)\> 
| $HOME/executable/a.out 

이 파일은 컴파일과 작품, 프록은 메일, 을 제공하고, 실행 파일이 출력 파일에 내용을 기록합니다.

#include <stdlib.h> 
#include <iostream> 
#include <fstream> 

using namespace std; 

int main(void) 
{ 
ofstream myfile; 
myfile.open ("output.txt"); 

    string line; 
    while (getline(cin, line)) 
    { 
    myfile << line << endl;  
    }  
myfile.close();  
return EXIT_SUCCESS; 
} 

문제는 내가 Mimetic 라이브러리의 생성자에 를 전달하는 내용으로 CIN의 객체가 필요하다. 실행 작품과 내가 얻는 두 경우 모두

cat message.txt | ./a.out 

./a.out < message.txt 

다음 두 번째 코드로 다음 나는 마임 메시지라는 message.txt을 경우

#include <stdlib.h> 
#include <iostream> 
#include <fstream> 
#include <mimetic/mimetic.h> 

using namespace std; 
using namespace mimetic; 

int main(void) 
{ 
ofstream myfile; 
myfile.open ("output.txt"); 

MimeEntity me(cin);       
const Header& h = me.header(); 
string subjectString = h.subject(); 
myfile << subjectString; 
myfile << "Check";  
myfile.close(); 
return EXIT_SUCCESS; 
} 

및 수행 나는 일이 실행 파일이 필요합니다 출력 파일의 제목이
인데도 불구하고 일부가 호출되고 procmail에 의해 내용이 파이프 처리되어 작동하지 않으면
이고 output.txt에있는 모든 내용은 "확인"되어 이라는 파일 적어도 호출되었습니다.

procmail.log에 모든 것이 정상이라고 나와 있습니다.

+0

@MichaelHampton Thanks. 네, 모방 사이트에서 예제를 시도했습니다. 똑같은 일은 콘솔에서 시도 할 때 훌륭하게 작동하며 procmail 파이핑을 사용하지 않습니다. 또 다른 것은 쉘 스크립트로 procmail을 시도 할 때도 작동한다는 것입니다. procmail 파이프와 함께 뭔가 ... – Stasv

+0

'쉘'의 가치는 무엇입니까? '.procmailrc'의 맨 위에'SHELL =/bin/sh'를 추가하면 개선 될 수 있습니까? – tripleee

답변

0

나는 정확하게 무엇이 진행되고 있는지 알지 못하지만, 입력을 std::cin에서 문자열로 캡쳐 한 후 그 값으로 구성된 std::istringstreamMimeEntity으로 전달합니다. 이 방법을 사용하면 std::cin의 입력이 라이브러리에서 여전히 처리되는 동안 검사 할 수 있습니다.

+0

나는 당신의 제안을 시도했다. procmail로 호출하면 MimeEntity 이전의 부분이 출력 파일에 인쇄됩니다. 하지만 MimeEntity의 구문 분석 된 콘텐츠는 아닙니다. 콘솔에서 시도 할 때 모든 것이 인쇄됩니다. cin 같은 객체를 "재구성"하는 다른 방법이 있습니까? – Stasv

+1

@Stasv :이 설명은 파이프가 _ 문제가 아님을 나타냅니다. 대신 프로그램 환경에서 procmail이'MimeEntity'를 끄도록 설정합니다. 'MimeEntity'가 다르게 설정되는 환경 변수 (예 : 로케일이나 인코딩)를 사용하는지, 사용자에게 의존성이 있는지 (예 : 콘솔에서 사용자 procmail로 프로그램 실행) 등을 확인합니다. –

+0

감사! 코드에서 사용자와 환경 변수를 검사하는 방법을 어떻게 알 수 있습니까? – Stasv