0

5 日間実行されていたジョブを送信しましたが、バグが発生したため、すべての作業が失われる可能性があります。「システム」呼び出しを行ってデータ ファイルを圧縮し、元の圧縮されていないファイルを削除しました。だから私はこれを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 行にあり、私がやりたかったことは data/compress でプログラムを呼び出すことでしたが、'/' がないためにシステム コマンドが失敗します。したがって、生成されたデータは圧縮されず、すぐに元のファイルが削除され、何も残されません! 圧縮されていればOKでした。

現在、このような状態で実行中のジョブが 5 つあります。5 日間の作業を無駄にしないように、この動作をどうにか流用する必要があります。現在のディレクトリに「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 ファイル名のままになります。

次に、compress コマンドなどの重要なエラー ステータスをチェックするようにプログラムを修正します。

于 2013-10-12T19:39:43.353 に答える