簡體   English   中英

連接std :: basic_ofstream <unsigned char> 到FIFO。 bad_cast異常

[英]Connecting std::basic_ofstream<unsigned char> to a FIFO. bad_cast exceptions

在Linux 2.6.32上使用gcc 4.4.3時,將std :: basic_ofstream連接到FIFO時出現bad_cast異常。

通過調試器,我可以看到該錯誤是在標准庫的各個位置生成的,因為流或filebuf對象的_M_codecvt成員為NULL。 發生的確切位置取決於操作的順序,但是在每種情況下似乎都是相同的原因。

那么我在這里做一些根本上愚蠢的事情嗎? ofstream和ifstream工作正常。 是否出於某些原因,您不應該將char以外的任何流附加到FIFO?

提前致謝。

編輯:添加源代碼。

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <sys/stat.h>
#include <pthread.h>
using namespace std;

//#define CHAR char
#define CHAR unsigned char
bool still_writing = true;

void* reader (void*)
{
    basic_ifstream<CHAR> in ("FIFO", fstream::in);
    basic_streambuf<CHAR> *stream_buffer = in.rdbuf();

    bool no_reads = true;
    CHAR buffer[10];

    while (stream_buffer->in_avail() ||
           still_writing || 
           no_reads)
    {
        in.readsome(buffer, 10);
        const int got = (int)in.gcount();
        if (got > 0) {
            std::cerr << "Got something!\n";
            no_reads = false;
        }
    }
}

int main ()
{
    mkfifo ("FIFO", S_IRUSR | S_IWUSR);

    pthread_t reader_thread_id;
    pthread_create (&reader_thread_id, NULL, reader, NULL);

    basic_ofstream<CHAR> out ("FIFO");
    out << (CHAR) 70;
    still_writing = false;
    out.flush();

    pthread_join (reader_thread_id, NULL);

    remove ("FIFO");
}

在此版本中,異常來自stream_buffer->in_avail()如果交換#define語句,一切都很好。

我有一個類似的問題。 我發現,不能設置skipws -flag。 確保使用std::noskipws(your_stream_obj) 我將其調試到gcc代碼中,找出了發生這種情況的原因,但已經忘記了。

希望有幫助...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM