2016-03-24 5 views
0

Wie der Titel sagt, versuche ich ein Programm zu schreiben, das Dateien aus einem Quellverzeichnis (vom Benutzer in der Shell als Umgebungsvariable gesetzt) ​​in ein Zielverzeichnis sichert (erneut vom Benutzer in der Shell als Umgebungsvariable festgelegt) zu einer bestimmten Sicherungszeit (vom Benutzer in der Shell als Umgebungsvariable festgelegt - Format HH: MM). Mein Code ist folgende:Ausführen eines C-Programms zum Sichern von Linux-Dateien

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

int main(int argc, char *argv[]) 
{ 
    int b=1; 
    char backup[100]; 
    char *source=getenv("BackupSource"); 
    char *destination=getenv("BackupDestination"); 
    char *btime=getenv("BackupTime"); 

    time_t getTime; 
    struct tm *actualTime; 
    time(&getTime); 
    actualTime=localtime(&getTime); 
    strftime(backup, 100, "%H:%M", actualTime); 

    while(b) 
    { 
     while(strcmp(backup,btime)!=0) 
     { 
      sleep(60); 
     } 
     system("cp -r $BackupSource $BackupDestination"); 
    } 

return 0; 
} 

Meine Frage ist folgende: wenn die Umgebungsvariable für Backup gesetzt ist meine inifinte Schleife funktioniert nicht. Ich habe print-Anweisungen bei jedem Schritt in der Schleife eingefügt und wenn die Variable für BackupTime nicht aus der Shell gesetzt ist, funktioniert es immer. Wenn die Variable gesetzt ist, kompiliert das Programm ohne irgendwelche Warnungen oder Fehler, aber es tut absolut nichts. Ich weiß, dass der Teil strcmp (backup, time) funktioniert, weil ich es separat ausgedruckt habe und wenn beide gleich sind, gibt es 0 zurück.

Irgendwelche Ideen, wie ich es zum Laufen bringen könnte?

Antwort

1

Das Problem in dem obigen Code ist, dass Sie einen Vergleich durchführen, aber Sie backup Variablenwert in der Schleife nicht aktualisieren.

Es sollte wie mehr aussehen:

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

int main(int argc, char *argv[]) 
{ 
    int b=1; 
    char backup[100]; 
    char *source=getenv("BackupSource"); 
    char *destination=getenv("BackupDestination"); 
    char *btime=getenv("BackupTime"); 

    time_t getTime; 
    struct tm *actualTime; 

    while(b) 
    { 
     //in each loop you get the time so it can be compared with the env variable 
     time(&getTime); 
     actualTime=localtime(&getTime); 
     strftime(backup, 100, "%H:%M", actualTime); 

     //no need for a while loop in a while loop 
     if(strcmp(backup,btime)==0) 
     { 
      system("cp -r $BackupSource $BackupDestination"); 
     } 
     sleep(60); 
    } 

return 0; 
} 
+0

funktioniert perfekt (wenn ich sonst schlafen (60)). Vielen Dank! – JavaNewb