2017-06-11 1 views
0

Ich habe ein Programm geschrieben, um die Ausgabe des "Traceroute" -Befehls zu drucken, die auf dem Linux-Terminal ausgeführt wird. Hier ist der Code:Wie bearbeite ich eine Textdatei in C, die mit einem Systembefehl erstellt wurde?

#include <stdio.h> 
#include <unistd.h> 
#include <string.h> 
#include <time.h> 

#include "SourceIP.c" 
#include "RandomTraceroute.c" 
#include "Time.c" 

int main() 
{ 
    unsigned char sourceIP[15]; 
    source(sourceIP); 
    printf("%s\n",sourceIP); 

    unsigned char destIP[15]; 
    randIP(destIP); 
    printf("%s\n",destIP); 

    char buff[100]; 
    timestamp(buff); 
    printf ("%s\n", buff); 

    char buf[BUFSIZ]; 
    snprintf(buf, sizeof(buf),"traceroute -q 1 %s >output.txt",destIP); 
    system(buf); 

    return 0; 
} 

Die Aufgabe ist es, diese ersten drei printf Linien wie die ersten drei Zeilen der output.txt Datei zu drucken, indem die bestehende erste Zeile der Textdatei zu entfernen. Kann jemand eine Antwort darauf vorschlagen? (Bitte beachten Sie über die Zeit Komplexität des Codes auch)

+3

'#include "SourceIP.c" #include "RandomTraceroute.c" # include "Time.c" '... hmmm .. braucht ein gutes C-Buch, –

+1

Vielleicht willst du' popen() '? – wildplasser

+0

Benötigt auch einen Mystiker. –

Antwort

0

Was denken Sie über folgenden Code:

#include <stdio.h> 
#include <unistd.h> 
#include <string.h> 
#include <time.h> 

#include "SourceIP.c" 
#include "RandomTraceroute.c" 
#include "Time.c" 

int main() 
{ 
    FILE *f = fopen("output.txt", "w"); 

    unsigned char sourceIP[15]; 
    source(sourceIP); 
    fprintf(f, "%s\n", sourceIP); 

    unsigned char destIP[15]; 
    randIP(destIP); 
    fprintf(f, "%s\n", destIP); 

    char buff[100]; 
    timestamp(buff); 
    fprintf(f, "%s\n", buff); 

    fclose(f); 

    char buf[BUFSIZ]; 
    snprintf(buf, sizeof(buf),"traceroute -q 1 %s 2> /dev/null >> output.txt", destIP); 
    system(buf); 

    return 0; 
} 
+0

Danke. Es funktioniert. Aber ich konnte nicht verstehen, wie die erste Zeile entfernt wird. Dieser Code druckt eine Phase aus der bestehenden ersten Zeile der Traceroute-Ausgabe –

+0

Sorry, dass ich das verpasst habe, habe ich meine Antwort aktualisiert. –

Verwandte Themen