【问题标题】:Running a C program to backup Linux files运行 C 程序来备份 Linux 文件
【发布时间】:2019-04-06 23:38:31
【问题描述】:

正如标题所说,我正在尝试编写一个程序,它将文件从源目录(由用户在 shell 中设置为环境变量)备份到目标目录(再次由用户在 shell 中设置)作为环境变量)在特定备份时间(由用户在 shell 中设置为环境变量 - 格式 HH:MM)。我的代码如下:

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

我的问题如下:当设置 BackupTime 的环境变量时,我的 inifinte 循环不起作用。我在循环的每一步都插入了打印语句,当没有从 shell 设置 BackupTime 的变量时,它总是有效的。设置变量后,程序编译时不会出现任何警告或错误,但它绝对什么也不做。我知道 strcmp(backup,time) 部分有效,因为我已经单独打印了它,当它们都相同时它返回 0。

关于如何让它发挥作用的任何想法?

【问题讨论】:

    标签: c linux shell backup


    【解决方案1】:

    上面代码中的问题是你执行了比较,但是你没有在循环中更新backup变量值。

    它应该看起来更像:

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

    【讨论】:

    • 完美运行(当我使用 else sleep(60) 时)。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多