システム関数呼び出しを使用してシェルコマンドを実行する[閉じる]

システム関数呼び出しを使用してシェルコマンドを実行する[閉じる]

システムコールを使用していくつかのディレクトリとファイルを作成しようとしています。前任者)

system("mkdir directory3");

始めるのに苦労しました。これが私が今まで持っているものです:

#include <stdio.h>
int main(int argc, const char * argv[])
{
    system(“mkdir dir1”);
    system(“mkdir dir2”);
    system(“mkdir dir3);
    system(touch file1”);
    system(“touch file2”);
    system(“cd dir1”);
    system(“mkdir dir4”);
    system(“cd dir4”);
    system(“touch file4”);
    system(“cd”);    
}

これは正しい形式ですか?

答え1

パブリッシュする前にコードをテストしたと仮定し(または構文エラーになる可能性のある引用符が含まれていないため)、デフォルトではコマンド以外のすべてがcd機能することがわかりました。

cd外部プロセスを呼び出し、対応する作業ディレクトリを変更してから、外部コマンドがすぐに終了するため、これらのコマンドは機能しないため、コマンドは適用されません。

他のコマンドに加えてする働きなさい、それではならない。呼び出すすべてのコマンド(mkdir、、cdおよびtouch)は、1つまたは2つのC関数呼び出し(実際にはシステム呼び出し)で実行できるため、外部コマンドで実行するためのパフォーマンスとセキュリティ上の不利益は実際には必要ありません。

system("mkdir foo") → mkdir("foo", 0777)
system("touch foo") → close(open("foo", O_WRONLY|O_CREAT, 0777))
chdir("foo")

(もちろん、エラーチェックは読者の練習問題として残されています。)

関連情報