execl() 関数で cat を使用してファイルをコピーする

execl() 関数で cat を使用してファイルをコピーする

フルパスのファイルをコピーし、execlを使用してCプログラムの名前を変更するには?このディレクティブを使用できますか?

execl("/bin/cat","cat",path_source,">",path_destination,NULL);

ベストアンサー1

公開したコードは、次のシェルコマンドを模倣するように設計されているようです。

cat path_source >path_destination

しかし、この場合引数では>ありません。代わりに、単一の引数で実行され、標準出力が接続されている catシェルによって解釈されます。 (だからCコードは。)catpath_sourcepath_destinationcat path_source '>' path_destination

上記のコマンドを模倣する1つの方法catは、シェルコマンド()を含む文字列を設定し、"cat ... >..."execを使用してそれをパラメータとして渡すことです/bin/sh -c。しかし、どれほど信頼性が高く安全なのかわからない場合は、信頼性が高く安全にすることは困難です。ファイル名が特定の制約に対して検証されていることを確認してください。

ファイル名のみを変更するには、の標準機能を使用することをお勧めrenameしますstdio.h。そうでない場合は、質問を明確にしてください。

おすすめ記事