2016-03-24 13 views
0

タイトルで言うように、ソースディレクトリ(環境変数としてシェル内のユーザーが設定したファイル)からコピー先のディレクトリにファイルをバックアップするプログラムを作成しようとしています特定のバックアップ時(環境変数 - 形式HH:MMとしてシェル内のユーザーによって設定される)に、ユーザーがシェルで環境変数として再度設定します。 BACKUPTIMEのための環境変数が設定されているとき、私のinifinteループが動作しません。Cプログラムを実行してLinuxファイルをバックアップする

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

私の質問は以下です:私のコードは次のようです。私はループ内のすべてのステップでprintステートメントを挿入しました。また、BackupTimeの変数がシェルから設定されていない場合は常に動作します。変数が設定されると、プログラムは警告もエラーもなくコンパイルされますが、絶対に何もしません。私は別にそれを印刷したのでstrcmp(バックアップ、時間)の部分が動作することを知っています。両方が同じ場合は0を返します。

どのように私はそれを動作させることができますか?

答えて

1

上記のコードの問題は、比較を実行するが、ループ内の変数値backupを更新しないことです。

それはより多くのようになります。(私は他の睡眠(60)を使用する場合)

#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

は完璧に動作します。ありがとうございました! – JavaNewb

関連する問題