2017-11-12 3 views
-2

Ich muss lesen einige Text nur mit Systemaufrufe (für Linux) in C und dann die letzten 6 Zeilen (genau wie der Tail-Befehl in Linux). Wie mache ich das? Wenn die Datei kleiner als 6 Zeilen ist, sollten die gesamten Dateien ausgegeben werden. Die Ausgabe sollte mit write sein.lese tfrom Terminal mit Systemaufrufen und Ausgabe letzten 6 Zeilen der Eingabe

Probeneingang:

1 
2 
344444 
44444 
555555555555555555555555555555555555 
6 
7 
8 
9 
100000 
11 

OUTPUT:

6 
7 
8 
9 
100000 
11 

Mit read(), dup() & close() fixiert mein Problem.

+1

Können Sie einige Beispieleingabe und -ausgabe zur Verfügung stellen? Ausarbeiten "Lesen von Terminal einige Text" – achal

+0

@achal hinzugefügt –

+1

Definieren Sie Ihr Betriebssystem. Per Definition sind Systemaufrufe OS-spezifisch. Unter Linux finden Sie [syscalls (2)] (http://man7.org/linux/man-pages/man2/syscalls.html). Und Sie müssen puffern (wie die C-Standard-Bibliothek tut) –

Antwort

1

Informationen zum grundlegenden Systemaufruf wie read(), dup() & close(). Öffnen Sie die Manpages &, überprüfen Sie, wie diese Systemaufrufe funktionieren. Ich postete meinen Code, indem ich bedachte, dass nur 10 keine Datei vorhanden sind, Sie können sie generisch machen.

#include<stdio.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 

int main(int argc, char * argv[]) 
{ 
     int a[10],i,n; 
     n= sizeof(a)/ sizeof(a[0]); 
     int fd ; 
     close(0);// close STDIN so that scanf will read from file 
     fd=open(argv[1],O_RDWR | 0664); 
     if(fd==-1) 
     { 
       perror("open"); 
       return 0; 
     } 

     for(i=0;i<n;i++) 
       scanf("%d",&a[i]); 


     //print only last 6.. I added random 6 you can take input from user input 
     for(i=n-1;i>n-6;i--) 
       printf("%d\n",a[i]); 

     return 0; 
} 
1

wie wäre es: während (lesen (STDIN_FILENO, & ch, 1)> 0) als Start? und Sie können die Ausgabe im Puffer speichern und die Zeilen mit einem Begrenzer bearbeiten und dann rückwärts auf dem Array gehen.

+0

Kann getchar nicht verwenden, nur Systemfunktionen. –

Verwandte Themen