On Sun, 29 Aug 2010 13:06:02 +0200
lano <[email protected]> wrote:

> Bernhard Guillon schrieb:
> > Wenn was unklar ist sag bescheid.
> bescheid.
> 
> Ich wollt nun, nachdem das mit hallo welt so gut geklappt hat eine
> datei auslesen.
> google an und ein beispiel genommen. wieder eine extra datei genommen 
> file.c und file.h
> 
> *-------file.h-------*
> #ifndef FILE_H //
> #define FILE_H // definiere
> 
> 
> char read_file(char *file_name); //Prototyp von deiner Funktion
> 
> 
> #endif //ende der Bedingung
> 
> 
> *--------file.c--------*
> #include <stdio.h>
> #include <stdlib.h>
> 
> #include "file.h"
> 
> int f;
/* du brauchst kein int, sondern ein (FILE *). int ist für file
deskriptoren, fgets und fopen aber benutzen zeiger auf FILE (ist ein
wrapper um filedeskriptoren, da ist sogar ein puffer mit drin). */
> char Text[600];
> 
> char read_file(char *file_name) {
/* du willst vermutlich nicht "char", sondern "char *" zurückgeben*/
>     f = fopen(file_name,"r");
>     while( fgets(Text, sizeof(Text), f) !=0 )
/* was machst du da? das sieht so aus als würdest du solange fgets !=0
zurückgibt die datei schließen, und das ganze auch noch in den immer
gleichen puffer schreiben (die alten daten gehen also verloren). */
>     fclose(file_name);
>     return Text;
/* return Text; wird vermutlich nichtmal übersetzt, da von (char *)
nach char konvertiert wird. */
> }
> 
> *-------main.c-------*
> #include "stdio.h"
> #include "plugin.h"
> #include "http.h" // HTTP Client
> #include "file.h" // Liest eine Datei
> 
> char channel[30];
> 
> // Starten des Plugins
> void plugin_exec(PluginParam *par) {
> 
> // Aktuellen Kanal holen und speichern
> HTTP_downloadFile("localhost", 80, "/control/getonidsid", 
> "/tmp/currentChannel", 0, 1);
> //read_file("/tmp/currentChannel");
> 
> printf("Kanal: %c\n", read_file("/tmp/currentChannel"));
> 
> 
> return;
> }
> 
> 
> *--------ENDE--------*
> 
> Das mit HTTP_downloadFile funktioniert wunderbar, also wurde ich ein 
> wenig übermütig, datei lesen klappt nicht.
> bei der printf Anweisung, wofür ist %s %c %l und was weis ich was es
> da noch gibt, habs erst mit %s versucht, dann hab ich gedacht ok ist
> ja nen char versuchstes mit %c :)
> 
> meine mal gelesen zu haben das void nix zurück gibt, int ne zahl, und 
> char nen zeichen.
siehe "man 3 printf" oder "man 3p printf" dazu.
%s sagt printf dass hier ein string reinkommt. %c ein zeichen, %l steht
für "long". Davon gibt's ne menge mehr, z.b. auch für floating point. 
> 
> Perl ist wesendlich einfacher :)
Perl ist auf ne andere art obskur ;)
Aber stimmt schon, C ist für neulinge nicht gerade einfach, und ich
finde dass die standard bibliothek es einem neuling nicht gerade
einfacher macht. 
> 
> -Sven-

Ich hoffe dass Ich dich nicht zu sehr verwirrt habe. 

Gruß, Nathanael

--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an