2016-03-28 9 views
-1

Wenn man fopen(), dann ist die Lösung einfach verwenden kann:Wie kann man sagen, ob eine Textdatei mit leerer geöffnet ist() anstelle von fopen()

FILE *fp; 
fp = fopen(path, "r"); 
fseek (fp, 0, SEEK_END); 
size = ftell(fp); 

wenn Größe Null ist die Datei leer ist.

Allerdings, wenn die Voraussetzung war, dass fopen() nicht verwendet werden kann. Statt dessen, was muss ich verwenden Systemaufrufe wie open():

int f = open(path, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); 

ftell() kann nur mit Dateityp-Streams verwendet werden. Ich habe das gegoogelt und konnte keine Lösungen finden.

+2

Sie können den Systemaufruf 'stat' verwenden. Sehen Sie sich das Element 'st_size' der Stat-Struktur für die Größe in Byte an. –

Antwort

3

Es ist keine C-Frage (Standard C weiß nicht über open), sondern eine Linux oder POSIX.

Sie brauchen nicht unbedingt open(2), und Sie sollten wissen, dass unter Linux einige andere Prozess könnte in eine Datei schreiben, die Sie geöffnet haben.

Dann könnten Sie die Größe einer Datei erhalten mit stat(2) (mit dem .st_size Feld) und man konnte die Größe eines geöffneten Dateideskriptor erhalten mit fstat

Sie könnten auch lseek(2) (es verwenden, verwendet werden könnte, sowohl für Setzen und Abfragen des aktuellen Dateioffsets eines geöffneten Dateideskriptors).

+0

Vielen Dank !! – user1966576