2016-03-24 14 views
0

Başlığın belirttiği gibi, bir kaynak dizinden (kabuktaki kullanıcı tarafından bir ortam değişkeni olarak ayarlanan) bir hedef dizine yedeklenecek bir program yazmaya çalışıyorum (kullanıcı tarafından belirli bir yedekleme süresinde (bir çevre değişkeni olarak kabukta kullanıcı tarafından ayarlanmış) (kullanıcı tarafından kabukta bir ortam değişkeni olarak ayarlanır - biçim HH: MM). BackupTime için ortam değişkeni ayarlandığında benim inifinte döngü çalışmaz:Linux dosyalarını yedeklemek için bir C programını çalıştırma

#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; 
} 

Sorum şudur: Kodum şudur. Döngünün her adımında yazdırma ifadeleri ekledim ve BackupTime için değişken kabuktan ayarlanmadığında her zaman çalışır. Değişken ayarlandığında, program herhangi bir uyarı veya hata olmadan derler ancak kesinlikle hiçbir şey yapmaz. Strcmp (yedekleme, zaman) parçasının çalıştığını biliyorum çünkü ayrı olarak yazdırdım ve ikisi de aynı olduğunda 0 değerini döndürüyor.

Nasıl çalışabileceğime dair herhangi bir fikir var mı?

cevap

1

Yukarıdaki koddaki sorun, bir karşılaştırmayı gerçekleştirmenizdir, ancak döngüde backup değişken değerini güncelleştirmiyorsunuz.

Daha gibi görünmelidir:

#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

eserler mükemmel (Ben başka bir uyku (kullandığınızda 60)). Teşekkür ederim! – JavaNewb

İlgili konular