0

我有一种情况,我提交了已经运行了五天的作业,但由于引入了一个错误,所有工作都可能丢失。我进行了“系统”调用来压缩数据文件,然后删除可能高达 4G 的原始未压缩文件。所以我在 C 代码中有这个

    strcpy(command,"data"); ////I should added a forward slash here "data/"
    sprintf(command,"%scompress -c -i %s -o %s",command,name,out_name);
    system(command);
    remove(name); /////This is the problem

该错误在 sprintf 行中,我想做的是在数据/压缩中调用程序,但由于缺少“/”,系统命令失败。因此产生的数据没有被压缩,然后原始文件立即被删除,让我一无所有!如果是压缩的就OK了。

目前有五个正在运行的作业处于这种状态。我需要以某种方式转移这种行为,以免我失去五天的工作。我正在考虑在当前目录中创建一个名为“datacompress”的假脚本来更改正在运行的程序的行为。我可以这样做还是有更好的选择,如果有的话?

4

2 回答 2

2

您可以创建datacompress一个符号链接到data/compress. 糟糕,除非进程$PATH包含..

另一种选择:删除用户对包含name. 这将导致remove()函数失败。

如果您的系统具有访问控制列表,请删除该进程对未压缩文件的删除权限。

当您尝试提出解决方案时,您可以通过以下方式暂停该过程:

kill -STOP <pid>
于 2013-10-12T18:30:38.993 回答
1

创建到数据文件的硬链接(不是符号链接):

ln datafile datafile.bkp

当程序删除原始数据文件时,文件的内容将保留在 .bkp 文件名下。

然后修复程序以检查压缩命令等重要内容的错误状态。

于 2013-10-12T19:39:43.353 回答