我有一种情况,我提交了已经运行了五天的作业,但由于引入了错误,所有工作都可能丢失。我进行了一次“系统”调用来压缩数据文件,然后删除可能与4G一样大的原始未压缩文件。所以我有这样的C代码用于修改运行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
bug是sprintf的线,在我想要做的是在数据调用程序/压缩,但由于缺少“/”系统命令失败。因此,生成的数据不会被压缩,然后立即将原始文件删除,而不需要任何东西!如果它被压缩了,那就没问题了。
目前在这种状态下有五个正在运行的作业。我需要改变这种行为,以便我不会失去五天的工作。我正在考虑在当前目录中创建一个名为'datacompress'的假脚本来改变正在运行的程序的行为。我可以这样做吗?或者有更好的选择吗?
两个提示:不要在'sprintf'中使用与源和目的地相同的缓冲区,您不知道函数将以何种顺序写入缓冲区。第二个是使用'snprintf'来代替,以避免可能的缓冲区溢出。 –
另一个提示 - 更新您的简历! –
我认为这可能是我使用sprintf导致问题的不好之处。即使我写了一个strcpy用“数据”来演示缺少的正斜杠,我实际上已经初始化为'data /',但不知何故斜线丢失了...... – danny