karl: fopen = open + flock?

hi,
was ist fopen? ist fopen open und flock in einem?
was ist an fopen anders als an open?

thx karl

  1. Moin,

    was ist fopen?

    frag ich mich auch ;)

    C:>perldoc -f fopen
    No documentation for perl function `fopen' found

    Viele Gruesse,

    n.d.p.

  2. Hi Karl,

    was ist fopen?

    fopen ist ein _PHP_ Befehl und macht das selbe wie open in PERL.
    fopen = file open.

    ist fopen open und flock in einem?

    nö, siehe oben.

    was ist an fopen anders als an open?

    Die Sprache *g*

    cu, Vedat

    1. Joho,

      fopen ist ein _PHP_ Befehl und macht das selbe wie open in PERL.
      fopen = file open.

      Das ist so nicht wahr.
      fopen() kommt aus C:

      FILE *fopen(const char *);

      Wobei FILE ein Integer-Typ ist und nicht nur fuer Datei-Zugriff verwendet wird.

      Gruss,
       CK
       http://wwwtech.de

      1. danke aber seid ihr euch sicher das es nicht das locking erstetzt?
        weil z.b. im YaBB wird nur fopen benutzt und ich kann nirgends im quelltext auch nur ein flock finden... wie locken die die dateien?

        1. danke aber seid ihr euch sicher das es nicht das locking erstetzt?
          weil z.b. im YaBB wird nur fopen benutzt und ich kann nirgends im quelltext auch nur ein flock finden... wie locken die die dateien?

          Genau! das hätt ich nun auch gern gewusst :)

          Rolf

        2. Moin,

          weil z.b. im YaBB wird nur fopen benutzt und ich kann nirgends im quelltext auch nur ein flock finden... wie locken die die dateien?

          also ich hab mir gerade das aktuelle yabb von http://yabb.xnull.com/downloads.php runtergeladen und habe einfach nach 'sub fopen' gesucht und bin in der Subs.pl auf eine etwas undurchsichtig geschriebene Funktion gestossen namens, aeh, fopen.
          Und - du solltest genauer suchen, da taucht sogar ein flock auf ;-)

          Was heisst das jetzt?
          Man definiere sich in merkwuerdig eingebundenen Modulen eine Funktion fopen, (von Exporter, .pm und dergleichen scheint da noch nie jemand was gehoert zu haben...)

          • und schon kann man fopen(xyz) schreiben.

          Viele Gruesse,

          n.d.p.

          1. Moin,

            weil z.b. im YaBB wird nur fopen benutzt und ich kann nirgends im quelltext auch nur ein flock finden... wie locken die die dateien?

            also ich hab mir gerade das aktuelle yabb von http://yabb.xnull.com/downloads.php runtergeladen und habe einfach nach 'sub fopen' gesucht und bin in der Subs.pl auf eine etwas undurchsichtig geschriebene Funktion gestossen namens, aeh, fopen.
            Und - du solltest genauer suchen, da taucht sogar ein flock auf ;-)

            Was heisst das jetzt?
            Man definiere sich in merkwuerdig eingebundenen Modulen eine Funktion fopen, (von Exporter, .pm und dergleichen scheint da noch nie jemand was gehoert zu haben...)

            • und schon kann man fopen(xyz) schreiben.

            Viele Gruesse,

            n.d.p.

            stimmt hast recht :)
            ist das den schlau das so zu lösen?
            oder gibt es ne bessere möglichkeit platform unabhänig zu schreiben ohne dabei aufs locking verzichten zu müssen?

            1. Moin,

              stimmt hast recht :)
              ist das den schlau das so zu lösen?
              oder gibt es ne bessere möglichkeit platform unabhänig zu schreiben ohne dabei aufs locking verzichten zu müssen?

              hmm, ja und ja.
              In der Praxis gibts kaum Serverbetriebssysteme im Einsatz, die kein flock koennen. Ich persoenlich traue flock allerdings auch nicht so richtig ueber den Weg, zumal  es einige Features nicht hat, die ich gerne haette.
              Und ein eigenes Locking zu programmieren ist eigentlich nicht sehr kompliziert (man muss wegen der Sicherheit der Daten nur sehr genau aufpassen, was man tut). Und - ein eigenes Lockverfahren duerfte den Rechner auch eine Idee mehr belasten (nur erheblich bei vielen Zugriffen).

              Obendrein laesst es sich auf eleganter programmieren, aber darueber habe ich mich ja schon ausgelassen.

              Viele Gruesse,

              n.d.p.

              1. hmm, ja und ja.
                In der Praxis gibts kaum Serverbetriebssysteme im Einsatz, die kein flock koennen. Ich persoenlich traue flock allerdings auch nicht so richtig ueber den Weg, zumal  es einige Features nicht hat, die ich gerne haette.
                Und ein eigenes Locking zu programmieren ist eigentlich nicht sehr kompliziert (man muss wegen der Sicherheit der Daten nur sehr genau aufpassen, was man tut). Und - ein eigenes Lockverfahren duerfte den Rechner auch eine Idee mehr belasten (nur erheblich bei vielen Zugriffen).

                Obendrein laesst es sich auf eleganter programmieren, aber darueber habe ich mich ja schon ausgelassen.

                Viele Gruesse,

                n.d.p.

                hmm also win98 unterstützt es auf jedenfall nicht und ich teste meine scripte eigentlich immer auf meinem win98 server und jedesmal im ganzen script flock einsetzten wenn ich es auf nem unix webserverlaufen lassen will oder halt auskommentieren ist ja auch nicht das wahre *fg :(

                wie könnt ich das denn am einfachsten lösen ohne mir mein eigenes locking zu programmieren?

                1. Tach auch!

                  hmm also win98 unterstützt es auf jedenfall nicht und ich teste meine scripte eigentlich immer auf meinem win98 server und jedesmal im ganzen script flock einsetzten wenn ich es auf nem unix webserverlaufen lassen will oder halt auskommentieren ist ja auch nicht das wahre *fg :(

                  Was passiert denn auf Win98, wenn man versucht, flock aufzurufen?

                  wie könnt ich das denn am einfachsten lösen ohne mir mein eigenes locking zu programmieren?

                  Vielleicht einfach flock mit einer Dummy-Funktion ueberschreiben? In der perlsub manpage gibt es einen Abschnitt "Overriding Builtin Functions", demzufolge das ungefaehr so gehen koennte:

                  use subs 'flock';
                  sub flock {
                    if ($WIN98) {
                      warn("No flock available.");
                      return undef;
                    } else {
                      return CORE::flock(@_);
                    }
                  }

                  Vorher feststellen, ob das Script auf $WIN9x laeuft. Wie das automatisch geht, weiss ich nicht, vielleicht musst Du $WIN98 auch einfach von Hand setzen. Denk dran, dass Win95 und wahrscheinlich auch WinME auch davon betroffen sind. Vielleicht hilft es weiter, dass auf Windosen
                    $^O eq "MSWin32"
                  und auf WinNT4
                    $ENV{'OS'} eq "Windows_NT"
                  gilt. Muesste man jetzt noch wissen, wie $ENV{'OS'} auf Win2000 aussieht.

                  So long

                  1. Tach auch!

                    hmm also win98 unterstützt es auf jedenfall nicht und ich teste meine scripte eigentlich immer auf meinem win98 server und jedesmal im ganzen script flock einsetzten wenn ich es auf nem unix webserverlaufen lassen will oder halt auskommentieren ist ja auch nicht das wahre *fg :(

                    Was passiert denn auf Win98, wenn man versucht, flock aufzurufen?

                    er sagt "flock() unimplemented on this platform" und hält das script an. wenn er es einfach ignorieren würde würde mir das ja reichen...

                    wie könnt ich das denn am einfachsten lösen ohne mir mein eigenes locking zu programmieren?

                    Vielleicht einfach flock mit einer Dummy-Funktion ueberschreiben? In der perlsub manpage gibt es einen Abschnitt "Overriding Builtin Functions", demzufolge das ungefaehr so gehen koennte:

                    use subs 'flock';
                    sub flock {
                      if ($WIN98) {
                        warn("No flock available.");
                        return undef;
                      } else {
                        return CORE::flock(@_);
                      }
                    }

                    Vorher feststellen, ob das Script auf $WIN9x laeuft. Wie das automatisch geht, weiss ich nicht, vielleicht musst Du $WIN98 auch einfach von Hand setzen. Denk dran, dass Win95 und wahrscheinlich auch WinME auch davon betroffen sind. Vielleicht hilft es weiter, dass auf Windosen
                      $^O eq "MSWin32"
                    und auf WinNT4
                      $ENV{'OS'} eq "Windows_NT"
                    gilt. Muesste man jetzt noch wissen, wie $ENV{'OS'} auf Win2000 aussieht.

                    So long

                    also wenn ich das mit ner variable einstellen kan reicht mir das schon völlig :)

                    1. also so funktioniert es :) ist das jetzt die beste (und einfachste) lösung dafür oder kennt jemand ne bessere? oder krieg ich so irgendweclhe probleme?

                      use subs 'flock';
                      $use_flock = 0;
                      sub flock {
                        if ($use_flock == 0) {
                          return undef;
                        } else {
                          return CORE::flock($_[0], $_[1]);
                        }
                      }

          2. Moin,

            Selber!

            Man definiere sich in merkwuerdig eingebundenen Modulen eine Funktion fopen, (von Exporter, .pm und dergleichen scheint da noch nie jemand was gehoert zu haben...)

            Merkwuerdig kommt mir dort einiges vor. Kannst Du mir sagen, was Zeilen wie
              $maintenance = $maintenance;
            bedeuten? (Kommt z.B. in Admin.pl vor.)

            So long

            1. Moin,
              Selber!

              Man definiere sich in merkwuerdig eingebundenen Modulen eine Funktion fopen, (von Exporter, .pm und dergleichen scheint da noch nie jemand was gehoert zu haben...)

              Merkwuerdig kommt mir dort einiges vor. Kannst Du mir sagen, was Zeilen wie
                $maintenance = $maintenance;
              bedeuten? (Kommt z.B. in Admin.pl vor.)

              So long

              guck nochmal genau hin da werden nur die veränderten einstellungen (is ja admin.pl) in die settings.pl geschrieben und in der stehen die halt nur als variablen und $maintenance damit da auch $maintenance steht und nicht der inhalt.... aber das muss ich dir ja glaub ich nicht sagen ;)

              1. Hi!

                guck nochmal genau hin da werden nur die veränderten einstellungen (is ja admin.pl) in die settings.pl geschrieben und in der stehen die halt nur als variablen und $maintenance damit da auch $maintenance steht und nicht der inhalt.... aber das muss ich dir ja glaub ich nicht sagen ;)

                Ah Mist, die haben ein Here document benutzt. Naja, es hat schon seinen Grund, warum man sowas nicht verwenden sollte, wenn man pflegeleichten Code haben will. Eben deswegen. ;-)

                So long

      2. Hi Christian!

        Wobei FILE ein Integer-Typ ist und nicht nur fuer Datei-Zugriff verwendet wird.

        Huh? In der MSVCRT sieht das so aus:

        struct _iobuf {
                char *_ptr;
                int   _cnt;
                char *_base;
                int   _flag;
                int   _file;
                int   _charbuf;
                int   _bufsiz;
                char *_tmpfname;
                };
        typedef struct _iobuf FILE;

        So long