EDIT: Ich habe schließlich inotify verwendet. Wie StefanB sagt, Inotify ist die zu verwendende Sache. Ich habe einen Tail-Klon gefunden, der inotify verwendet, um den -f-Modus inotail zu implementieren.Benutzerdefinierte Implementierung der "Tail-f" -Funktionalität in C
Original Frage Text:
Ich versuche, die "tail -f" Logik in einem C-Projekt zu implementieren, für die Prototyping Zweck ich es in Python wie folgt entwickelt:
# A forever loop, each 5 seconds writes a line into file.txt
from time import *
while 1:
sleep(5)
file = open("file.txt", "a")
file.write("This is a test\n")
file.close()
Die nächste Code folgt den eOF von datei.txt (durch den Code aktualisiert oben)
# tail -f
from time import *
file = open("file.txt", "r")
file.seek(0, 2)
while 1:
line = file.readline()
if not line:
sleep(1)
else:
print line
file.close()
Alle funktionieren gut, aber die C-Implementierung funktioniert nicht (es gibt keinen Check-Fehlercode). Die Einbeziehung von stdio.h, string.h und unistd.h entfällt (die Einfärbung verbirgt den Header-Include-Code).
#define LINE_LEN 256
int main(int argc, char **argv)
{
FILE *f;
char line[LINE_LEN];
f = fopen("file.txt", "r");
fseek(f, 0, SEEK_END);
while (1)
{
fgets(line, LINE_LEN, f);
if (strlen(line) == 0)
{
sleep(1);
}
else
{
printf("Readed: %s", line);
}
}
fclose(f);
return 0;
}
Eine Idee?
Ist eine gute Idee, implementieren Sie es mit einer Umfrage() statt der vorgestellten Lösung ?.
Vielen Dank im Voraus.
Ich habe es versucht, aber ich habe das gleiche Verhalten erhalten. Danke! –