Problem mit fopen unter Linux
-
so wie ichs oben gepostet hab, hab ichs in linux in eine textdatei geschrieben und mittels gcc compiliert
-
lass dir einfach mal die konkrete Fehlermeldung ausgeben.
datei = fopen("text.txt", "a+"); if(!datei) { perror("fopen"); return EXIT_FAILURE; }
-
ok jetzt kommt nach ausführen des Programms in der bash folgende Meldung
fopen: Success
Fehler beim Schreiben der Datei!
-
Zeig mal bitte einen minimalen aber vollständigen Code, der den Fehler illustriert.
-
da ich erstmal nur ein paar sachen unter linux testen wollte, bevor ich an mein zu schreibendes Programm gehe, fällt der Code auch wirklich nur sehr kurz aus
#include <stdio.h> #include <unistd.h> #include <sys/types.h> int main(int argc, char* argv[]) { t_pid pid; FILE *datei; datei = fopen("test.txt", "a+"); if(datei==NULL) { fprintf(stderr, "Fehler beim oeffnen der Datei!"); return EXIT_FAILURE; } pid= getpid(); fprintf(datei, "Parent Pid: %d\n", pid); fclose(datei); return EXIT_SUCCEED; }
-
t_pid? EXIT_SUCCEED?
kein stdlib.h?Folgendes läuft bei mir:
#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> int main(int argc, char* argv[]) { pid_t pid; FILE *datei; datei = fopen("test.txt", "a+"); if (!datei) { perror("Fehler beim oeffnen der Datei!"); return EXIT_FAILURE; } pid = getpid(); fprintf(datei, "Parent Pid: %d\n", pid); fclose(datei); return EXIT_SUCCESS; }
Fügt bei jedem Aufruf eine Zeile mit der PID ein (NICHT PPID).
-
ja mein post war nciht ganz richtig da ich den code schnell aus dem kopf tippen musste (kontne ihn grad nicht von der datei kopieren, da anderer pc)
weiß schon das der code richtig ist aber fopen geht trotzdem nicht bei mir... hat das irgendwas mit schreibrechte oder so zu tun. bin neu bei linux. aber ich denk mir halt dass wenn ich das programm erstellt habe, es am desktop starte und das programm eine neue textdatei erstellt, ich doch vollen zugriff auf die haben müsste. sprich zumindest schreiben/lesen
-
beuschl schrieb:
ok jetzt kommt nach ausführen des Programms in der bash folgende Meldung
fopen: Success
Fehler beim Schreiben der Datei!beuschl schrieb:
ja mein post war nciht ganz richtig da ich den code schnell aus dem kopf tippen musste (kontne ihn grad nicht von der datei kopieren, da anderer pc)
Bist du sicher, dass dein Code richtig ist? Wenn du bei perror ein Success bekommst, heißt das nämlich, dass der Systemaufruf davor erfolgreich war. Irgendwo muss ein Problem mit deinem Programm sein. Wenn du es aus dem Kopf hier hin tippst, bringt das nichts.
-
hi
hier habe ich meinen derzeit aktuellen code. das problem mit fopen besteht leider weiterhin
#include <stdio.h> #include <getopt.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include "config.h" void child(FILE *file); void parent(FILE *file); int main(int argc, char *argv[]) { pid_t pid, wpid; int status; FILE *datei; /*if(argc < 3) { fprintf(stderr, "rm: Zu wenig Argumente eingebenen!\n"); return EXIT_FAILURE; }*/ datei = fopen("test.txt", "a+"); if(datei == NULL); { perror("fopen"); fprintf(stderr, "rm: Fehler beim Schreiben der Datei !\n"); return EXIT_FAILURE; } pid = fork(); switch(pid) { case -1: fprintf(stderr, "rm: Fehler bei fork()!\n"); return EXIT_FAILURE; case 0: child(datei); break; default: while( (wpid = wait(&status)) != pid) { if (wpid != -1) continue; fprintf(stderr, "rm: Fehler bei wait!\n"); return EXIT_FAILURE; } parent(datei); } return 0; } void child(FILE *file) { uid_t user; pid_t cpid; user = getuid(); cpid = getpid(); fprintf(file, "Userid: %d\nProzessid: %d\n", user, cpid); fclose(file); } void parent(FILE *file) { uid_t user; pid_t ppid; user = getuid(); ppid = getpid(); fprintf(file, "Userid: %d\nProzessid: %d\n", user, ppid); fclose(file); }
-
beuschl schrieb:
datei = fopen("test.txt", "a+");
Da ist ein Semikolon zu viel. Genau desshalb bringt es nichts, den Quelltext aus dem Kopf hinzuschreiben.
Druch das Semikolon wird der Teil in den geschweiften Klammern immer ausgeführt, egal, was das If ergibt.
-
Mit der schon angesprochenen Änderung:
datei = fopen("test.txt", "a+"); if(datei == NULL) /* hier war der ; falsch...*/ { perror("fopen"); fprintf(stderr, "rm: Fehler beim Schreiben der Datei !\n"); return EXIT_FAILURE; }
funktioniert das ganze einwandfrei.
-
danke für eure Hilfe. das war echt ein dumemr Fehler, den ich immer übersehen hab