用于修改运行C程序行为的脚本

时间:2013-10-12 18:22:17

标签: c bash cmd exec

我有一种情况,我提交的作业已经运行了五天,但由于引入了一个错误,所有的工作都可能丢失。我做了一个“系统”调用来压缩数据文件,然后删除可能大到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行中,我想要做的是在数据/压缩中调用程序,但由于缺少'/',系统命令失败。因此产生的数据不会被压缩,然后立即将原始文件删除,让我什么都没有!如果它被压缩就可以了。

目前在这种状态下有五个正在运行的工作。我需要以某种方式转移这种行为,这样我就不会失去五天的工作。我想在当前目录中创建一个名为'datacompress'的假脚本来改变正在运行的程序的行为。我可以这样做,还是有更好的选择,如果有的话?

2 个答案:

答案 0 :(得分:2)

您可以将datacompress设为data/compress的符号链接。糟糕,除非流程的$PATH包含.,否则无法使用。

另一个选项:删除用户对包含name的目录的写入权限。这将导致remove()函数失败。

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

当您尝试提供解决方案时,可以使用以下命令暂停该过程:

kill -STOP <pid>

答案 1 :(得分:1)

为数据文件创建硬链接(符号链接):

ln datafile datafile.bkp

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

然后修复程序以检查重要事项的错误状态,例如compress命令。