管道内容到c ++可执行文件时procmail的奇怪行为

时间:2013-08-24 00:52:47

标签: c++ piping procmail

我有一个工作的procmail配置 这是rc.filters:

:0 w :a.lock
* ^From:(.*\<)?(try@gmail\.com)\>
| $HOME/executable/a.out

这个文件编译和工作,procmail传递邮件, 并且可执行文件将内容写入输出文件。

#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;
} 

问题是我需要一个带有要传递内容的cin对象 到Mimetic库的构造函数。 我需要这个可执行文件才能工作:

#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;
}

如果我使用名为message.txt的Mime消息并使用第二个代码执行以下操作:

cat message.txt | ./a.out

./a.out < message.txt

在这两种情况下,可执行文件都可以工作,我在output.txt中获取主题 但对于某些人来说,当它被调用并且由procmail传送的内容不起作用时, 而我在output.txt中得到的只是“Check”,这意味着该文件 至少被援引过。

procmail.log表明一切都很好。

1 个答案:

答案 0 :(得分:0)

我不知道究竟发生了什么,但我会将std::cin的输入捕获到字符串中,然后将从该值构造的std::istringstream传递给{{1 }}。通过这种方式,您可以检查来自MimeEntity的输入,同时仍由库处理它:

std::cin