system() の IFS 変数は無視されます。

system() の IFS 変数は無視されます。

私は大学コースの権限昇格に努めています。私は単にlsビットの出力をコピーして設定する簡単なコードを持っていますSUID

int main(void){
  system("/bin/ls");
  return 0;
}

また、シェルとして機能するスクリプトをホームディレクトリに追加しました。

#!/bin/bash
/bin/sh

また、最初の変数である.変数を追加しました。$PATHしたがって、Cでコードを実行するたびにbinホームディレクトリのスクリプトを呼び出す必要がありますが、変数が代わりにIFS実行されるため、変数は完全に無視されます。なぜですか?/bin/lsbin ls

ベストアンサー1

プログラムは実行されません」binscript"をホームディレクトリに保存します。を実行します"/bin/ls"。システムコールはシェルを使用しますが、絶対パス名も使用します(実際にはPOSIX実行方法は実装によって定義されます。)シェルの選択にPATH影響を与える方法はありません。ls

POSIX行動について次のようにIFS言います。

実装が無視できる値IFS環境にあってもなくてもIFS環境でシェルを呼び出すとき、シェルは以下を設定する必要があります。IFS<space> <tab> <newline>呼び出されるまで。

実装について問い合わせる場合いいえこのように振る舞うと(POSIXはこれらの慣行が目立つほど頻繁に発生することを示唆しているため)、特定の実装が関連しているはずです。

おすすめ記事