fifopipe und c++

Brusko

Well-Known Member
Hallo,
eine Fifopipe kann ich ja wie eine Datei behandeln und mit
ifstream stream("meine datei",ios::in);
öffnen, sollte das denn auch mit oftream zum schreiben gehen ?
Habe mir eine funktion geschrieben die es in eine Datei schreibt aber ändere
ich die Datei in eine Fifo um gtehts nicht.
warum nicht ?!

mfg Michael

Code:
void read_sender (int sendernr) // senderstream aus Datei lesen und zuordnen
    {
     ostringstream cmd;
     cmd << "SENDER" << sendernr;
     string radiosender;
     ifstream senderstreamin("/tmp/homecontrol.conf",ios::in);
     if (!senderstreamin)
       {
        errorwrite("/tmp/homecontrol.conf","read_sender");
       }
     else
         {
          while (!senderstreamin.eof())
               {
                getline(senderstreamin, radiosender, '\n');
                if (radiosender.find(cmd.str().c_str()) !=string::npos)
                  {
                   ifstream senderstreamout("/tmp/mpg123in.pipe",ios::in);
                   if (!senderstreamout)
                     {
                      errorwrite("/tmp/mpg123in.pipe","read_sender");
                     }
                   else
                       {
                        senderstreamout.close();
                        radiosender = string_to_cut(radiosender,"=",";",1,0);
                        ofstream senderstreamout("/tmp/mpg123in.pipe",ios::out);
                        senderstreamout << radiosender;
                        senderstreamout.close();
                       }
                  }
                radiosender.erase();
               }
          senderstreamin.close();
         }
    }
habe den code mal eingefügt, nicht hauen gibt sicherlich bessere :-)
 
Zuletzt bearbeitet:
Ich verstehe die Frage irgendwie nicht :( :confused:

Vielleicht bin ich aber auch einfach nur noch zu besoffen von gestern...

Herakles
 
Vieleicht war ich ja selber besoffen beim stellen der Frage :-),

Ich habe Probleme allgemein mit der Fifo-pipe. Meine Funktion habe ich mal neu geschrieben und nun besteht das problem das die Funtkion beim Lesen der Datei hängen bleibt.
Code:
void writedateistream (string datei , string stream , string funktion)
      {
       ostringstream dateistream;
       dateistream << datei;
       ifstream dateioutputstream(dateistream.str().c_str(),ios::in);
       if (!dateioutputstream)
         {
          errorwrite(dateistream.str().c_str(), funktion);
         }
       else
           {
            dateioutputstream.close();
            ofstream senderstreamout(dateistream.str().c_str(),ios::binary);
            senderstreamout << stream << endl;
           }
      }

klammere ich ifstream aus dann funktioniert die funktion einwandfrei.
Es soll eine fifopipe geöffnet werden die zum zeitpunkt noch leer ist.
Ifstream wird hier nur verwendet um zu testen ob die Datei vorhanden ist.

Hier mal die anderen Funktionen die hier zugehören.

Code:
string readdateistream (string datei , string stream , string funktion)
      {
       ostringstream dateistream;
       dateistream << datei;
       string buffer;
       string bufferreturn;
       ifstream dateiinputstream(dateistream.str().c_str(),ios::in);
       if (!dateiinputstream)
         {
          errorwrite(dateistream.str().c_str(), funktion);
         }
       else
           {
            while (!dateiinputstream.eof())
                 {
                  getline(dateiinputstream, buffer, '\n');
                  if (buffer.find(stream) !=string::npos)
                    {
                     bufferreturn = buffer;
                    }
                  buffer.erase();
                 }
           }
       dateiinputstream.close();
       return bufferreturn;
      }

void sender_command (int sendernr)
    {
     ostringstream sender;
     sender << "SENDER" << sendernr;
     string buffer;
     string command;
     buffer=readdateistream("/tmp/homecontrol.conf",sender.str(),"read_command");
     command=string_to_cut(buffer,"=",";",1,0);
     writedateistream("/tmp/mpg123in.pipe",command,"read_command");
cout << "WEITERGELAUFEN ??";
     buffer.erase();
     command.erase();

void errorwrite (string errorstream , string position) // Fehlermelung schreiben
    {
     ofstream errordatei("/tmp/homecontrol.error",ios::out|ios::app);
     errordatei << errorstream << " konnte in funktion "<< position << " nicht geoeffnet werden\n";
     errordatei.close();
     errorstream.erase();
    }

Die fifopipe kann man doch wie eine normale Datei behandeln oder nicht ?

Gibt es ansonsten meine andere Möglichkeit zu überprüfen ob eine Datei vorhanden ist ?
ohne sie zu öffnen.

Mfg Michael

ps: Frohes neues Jahr zusammen :-)
 
Zuletzt bearbeitet:
Habe anscheinend den Fehler gefunden zumindest gehts jetzt,

wenn ich in der writedateistream funktion die Pipe anstelle mit
ifstream stream(datei,ios::in),
mit
ifstream stream(datei,ios:: | ios::out) öffne
bleibt es nicht mehr hängen.
Aber warum nicht wäre da eigentlich die frage ?
 
Zurück
Oben