[halbwegs gelöst] kann mit fopen weder files lesend / schreibend öffnen

  • nabend,


    ich bekomme es ums verrecken nicht hin eine datei lesend bzw schreiben zu öffnen.. file wird im konstruktor geöffnet:



    den rufe ich an zbsp mit

    Code
    myFRB = new cFileRingBuffer(100000000, 188, 0, "/var/lib/video.00/file.ts");


    vdr wird unter user vdr gestartet, schreibrechte in video.00 sind natürlich vorhanden..


    dennoch steigt er aus :

    Zitat

    Jan 9 21:27:06 ubuntu-vm vdr: [19324] could not open file /var/lib/vdr/video.00/file.ts for writing
    Jan 9 21:27:06 ubuntu-vm vdr: [19324] could not open file /var/lib/vdr/video.00/file.ts for reading


    hat da jemand ne idee?


    infinite

    kuifje
    asus m2n-vm | Athlon 5600 | Nvidia 9300GE | TT S2-3200
    yaVDR 0.4 | 1.7.21
    haddock
    asus p4pe | 2ghz | 3x DVB-S Budget | 2x500gb
    debian lenny 2.6.29.3 | e-tobi 1.7.0 | streamdev cvs | live


    <30.12.07 <igel>sid fuer den gewissen kick>
    <01.04.08 <igel>ich kann eh nix ausser debian pakete installiern>
    <15.12.09 igel hasst linux>
    <23.02.10 <igel> easyvdr is nur easy wenn es easy is>

    Einmal editiert, zuletzt von infinite ()

  • Ein paar Fragen dazu..


    Sind fwrt und frd vom Type FILE*?


    Warum öffnest du nicht nur einmal mit "r+b" oder "w+b" statt zweier Datei Handles auf die gleiche Datei?


    Solltest du nicht location am Beginn auf Gültigkeit prüfen, um unerklärliche Abstürze später zu vermeiden? Oder vielleicht sogar besser cString verwenden..

  • Zitat

    Originally posted by wirbel
    Sind fwrt und frd vom Type FILE*?


    jap, sind vom type FILE*


    Zitat

    Originally posted by wirbel
    Warum öffnest du nicht nur einmal mit "r+b" oder "w+b" statt zweier Datei Handles auf die gleiche Datei?


    weil ich auch wirklich beide pointer zu unterschiedlichen zeiten / zwecken an unterschiedlichen positionen im file benutze.
    das ganze hat seinen sinn (file basierter ringbuffer) und läuft unter windows in visual studio auch 1a.


    Zitat

    Originally posted by wirbel
    Solltest du nicht location am Beginn auf Gültigkeit prüfen, um unerklärliche Abstürze später zu vermeiden? Oder vielleicht sogar besser cString verwenden..


    jap, beides gute ratschläge die ich auch umsetzen werde. dennoch zeigt ja das syslog dass location gültig ist (das ist natürlich keine entschuldigung / rechtfertigung für den zugegebenermassen noch etwas schmutzigen code)


    infinite

    kuifje
    asus m2n-vm | Athlon 5600 | Nvidia 9300GE | TT S2-3200
    yaVDR 0.4 | 1.7.21
    haddock
    asus p4pe | 2ghz | 3x DVB-S Budget | 2x500gb
    debian lenny 2.6.29.3 | e-tobi 1.7.0 | streamdev cvs | live


    <30.12.07 <igel>sid fuer den gewissen kick>
    <01.04.08 <igel>ich kann eh nix ausser debian pakete installiern>
    <15.12.09 igel hasst linux>
    <23.02.10 <igel> easyvdr is nur easy wenn es easy is>

  • Ich frag deswegen, weil das


    frd = fopen(location, "rb");


    voraussetzt, dass


    fwrt = fopen(location, "wb");


    bereits erfolgreich die Datei "location" angelegt hat, und ich nicht sicher bin, dass sowas nicht zu ner race condition führt, wenn ein compiler optimiert..

  • ok, wäre möglich.... aber wenn fwrt location erfolgreich geöffnet hat müsste da ja ned NULL zurück kommen..


    auch wenn ich file.ts selbst erstelle kommt frd ned über NULL hinaus.


    edit:
    im syslog sieht das ganze dann ungefähr so aus:

    Zitat

    Jan 9 22:37:41 ubuntu-vm kernel: [46292.185430] vdr[20385]: segfault at 0 ip 00236e40 sp bfbf0b90 error 4 in libc-2.10.1.so[1d9000+13e000]
    Jan 9 22:37:41 ubuntu-vm vdr: [20385] could not open file file.ts for writing
    Jan 9 22:37:41 ubuntu-vm vdr: [20385] could not open file file.ts for reading


    der segfault kommt also irgendwie schon vorher..


    infinite

    kuifje
    asus m2n-vm | Athlon 5600 | Nvidia 9300GE | TT S2-3200
    yaVDR 0.4 | 1.7.21
    haddock
    asus p4pe | 2ghz | 3x DVB-S Budget | 2x500gb
    debian lenny 2.6.29.3 | e-tobi 1.7.0 | streamdev cvs | live


    <30.12.07 <igel>sid fuer den gewissen kick>
    <01.04.08 <igel>ich kann eh nix ausser debian pakete installiern>
    <15.12.09 igel hasst linux>
    <23.02.10 <igel> easyvdr is nur easy wenn es easy is>

    Einmal editiert, zuletzt von infinite ()


  • Wenn man z.B.

    Code
    if (fwrt == NULL)
                      perror("open for writing");


    nimmt, sagt er, was ihm nicht paßt...


    CU
    Oliver

  • Noch ne Frage..


    sollte das nicht eher ein


    cFileRingBuffer::cFileRingBuffer(int Size, int BlockSize, int Margin, const char *location)


    werden?

  • jap, wars auch, hatte const nur probeweise rausgenommen.


    perror werd ich jetz mal probieren, danke!

    kuifje
    asus m2n-vm | Athlon 5600 | Nvidia 9300GE | TT S2-3200
    yaVDR 0.4 | 1.7.21
    haddock
    asus p4pe | 2ghz | 3x DVB-S Budget | 2x500gb
    debian lenny 2.6.29.3 | e-tobi 1.7.0 | streamdev cvs | live


    <30.12.07 <igel>sid fuer den gewissen kick>
    <01.04.08 <igel>ich kann eh nix ausser debian pakete installiern>
    <15.12.09 igel hasst linux>
    <23.02.10 <igel> easyvdr is nur easy wenn es easy is>

  • perror meldet zweimal permission denied.


    directory gehört aber vdr:

    Zitat

    jan@ubuntu-vm:~$ ls -ld /var/lib/video.00/
    drwxr-xr-x 2 vdr vdr 4096 2010-01-09 22:53 /var/lib/video.00/


    sogar wenn ich vdr als root starte!


    irgendwas is da faul...

    kuifje
    asus m2n-vm | Athlon 5600 | Nvidia 9300GE | TT S2-3200
    yaVDR 0.4 | 1.7.21
    haddock
    asus p4pe | 2ghz | 3x DVB-S Budget | 2x500gb
    debian lenny 2.6.29.3 | e-tobi 1.7.0 | streamdev cvs | live


    <30.12.07 <igel>sid fuer den gewissen kick>
    <01.04.08 <igel>ich kann eh nix ausser debian pakete installiern>
    <15.12.09 igel hasst linux>
    <23.02.10 <igel> easyvdr is nur easy wenn es easy is>

  • so, es geht jetzt. hab mal /var/lib/vdr als directory genommen, da klappts...

    kuifje
    asus m2n-vm | Athlon 5600 | Nvidia 9300GE | TT S2-3200
    yaVDR 0.4 | 1.7.21
    haddock
    asus p4pe | 2ghz | 3x DVB-S Budget | 2x500gb
    debian lenny 2.6.29.3 | e-tobi 1.7.0 | streamdev cvs | live


    <30.12.07 <igel>sid fuer den gewissen kick>
    <01.04.08 <igel>ich kann eh nix ausser debian pakete installiern>
    <15.12.09 igel hasst linux>
    <23.02.10 <igel> easyvdr is nur easy wenn es easy is>

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!