%20%E3%81%AF%E7%B5%B6%E5%AF%BE%E3%83%91%E3%82%B9%E3%81%8C%E3%81%AA%E3%81%84%E3%81%A8%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82.png)
に保存されているCプログラムがあります/usr/sbin/
。このプログラムは2秒ごとに「Hello World」を印刷します。任意のフォルダからプログラムを呼び出す/実行できます。
これを使用してCプログラムを作成すると、system("a.out");
すべてのフォルダで実行されますが、使用するときはexecl()
絶対パスを指定する必要があります。execl("/usr/sbin/a.out", "a.out");
それ以外の場合は実行されません。なぜ?
答え1
system()
sh
Cライブラリ関数は、指定されたコマンドを実行するために使用されます。これにより、$PATH
プログラムは絶対パスを使用して指定されていない限り、ディレクトリから実行可能ファイルを検索します。 Cライブラリ関数はexecl()
これらのクエリを実行しません。
exec
この機能シリーズを使用してプログラムを実行し、execlp()
どの機能を使用してPATH
調べますか?
システムを確認してくださいman execlp
。