Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » open() liefert 0 zurück

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.09.2003, 15:43 Uhr
typecast
aka loddab
(Operator)


Ich kämpfe schon wieder mit einem Problem. Ich versuche eine Datei mit

C++:
if (fdlogfile = open(file, O_CREATE | O_RDWR, S_IRWXU) == -1)


zu öffnen. Wenn die Datei nicht existiert, dann wird sie ganz normal erstellt. Aber ob die Datei existiert oder nicht, der Filedeskriptor ist immer 0 und damit schreibe ich dann auf den stdout. Was mache ich den schon wieder falsch?
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.09.2003, 15:52 Uhr
virtual
Sexiest Bit alive
(Operator)


Klammern vergessen, gelle?
Du schribst im Prinzip:

C++:
if (fdlogfile = (open(...) == -1))


weil das == stärker bindet als das =
Du willst:

C++:
if ((fdlogfile = open(...)) == -1)


Ich bevorzuge direkt:

C++:
if (-1 == (fdlogfile = open(...)))


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.09.2003, 15:56 Uhr
ao

(Operator)


Laut glibc-Manual auf www.gnu.org ist der Rückgabewert im Erfolgsfall ein "non-negative file descriptor", d.h. 0 wäre OK.

Hast du denn tatsächlich probiert, was zu schreiben, und der Text ist wirklich im stdout gelandet, oder hast du dir das nur zusammengereimt?

Hast du eigentlich einen besonderen Grund, open zu benutzen und nicht fopen?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.09.2003, 15:59 Uhr
ao

(Operator)


Ich ziehe meinen Vorschlag zurück und schließe mich erst mal urform an. Ich denke, er hat recht.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.09.2003, 16:06 Uhr
typecast
aka loddab
(Operator)


@ao: Ich habe es wirklich ausprobiert. Eigentlich habe ich keinen besonderen Grund open() zu nehmen. Hat fopen() viele Vorteile gegenüber open()?
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.09.2003, 16:12 Uhr
Pablo
Supertux
(Operator)


Mit fopen kümmerst du dich mit den Rechten. Wenn du die Datei nicht öffnest, ist weil sie nicht existiert oder weil du keine Rechte hast. Ich habe nie open benutzt, ich benutze nur fopen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.09.2003, 16:19 Uhr
virtual
Sexiest Bit alive
(Operator)


Pablo.
Woher hast Du dieses Wissen?
fopen ist ANSI, open "nur" POSIX. Von der Funktionalität her setzt fopen bei UNIX Implementation nur auf open auf, indem es den zweiten parameter in die O_* Konstanten des open unsetzt. Es gibt beim open jedoch einige Features, die nicht mit fopen erreichbar sind.

Vorteil fopen: ANSI und damit zu nicht POSIX (==nicht UNIX Systemen) portabel.

Vorteil open: Etwas mehr einflußmöglichkeiten hinsichtlich des Openmodes (zB NonBlocking IO)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.09.2003, 16:40 Uhr
0xdeadbeef
Gott
(Operator)


An fopen hängen noch einige andere Funktionen, die das filehandling erleichtern, z.B. fprintf und fscanf. open ist da plain-vanilla und erlaubt im wesentlichen write und read. Eine Zahl als String in eine Datei zu schreiben sähe mit fopen zum Beispiel so aus:

C++:
FILE *fd = fopen("test.txt", "w");
fprintf(fd, "%d\n", 42);
fclose(fd);


mit open dagegen so:

C++:
int fd = open("test.txt", O_CREAT);
char buf[4];
sprintf(buf, "%d\n", 42);
write(fd, buf, 3);
close(fd);


In der Regel macht es mehr Sinn, fopen etc. zu benutzen, open ist eher in Ausnahmefällen zu gebrauchen. C-Golf zum Beispiel

In C++ benutzt man stattdessen natürlich fstream.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.09.2003, 16:44 Uhr
Pablo
Supertux
(Operator)


Ich hab ja schon gesagt, dass ich nicht open benutze. Ich hab mit fopen mich nie um die Rechte der Dateien kümmern müssen. Ob sie POSIX ist oder nicht, eiß ich nicht. Woher soll cih das wissen, wenn ich sie nie benutze?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: