2012-03-19 9 views
-4

私はGNU Linuxの初心者です。Cプログラムを使ってプログラムに引数を与える

ちょうど起動時に自分のコードでinitプログラムを置き換えようとしていますが、私はプログラムの最後に元のinitを呼び出しています。

しかしここに問題があります:私はここでパラメータを与えることができません。プログラムでinitをsystem("/sbin/init")と呼びました。どのようにパラメータを与えることができますか?このよう

+7

を参照してください。 、むしろ 'exec'のバージョンです。 –

+0

あなたはコードを少なくとも簡単に投稿するべきです。 – Randy

+0

duplicate:http://stackoverflow.com/questions/5771717/passing-parameters-to-system-calls –

答えて

3

初心者なら、はシステムのルートブートプロセスを置き換えます。?それはやっているのはかなり危険なことのように聞こえる。ライフル、または何かを扱うの最初の週apple shotをやっているようなビット。

あなたのアプローチが適切であると仮定すると、希望する引数を含むように文字列をフォーマットし、その文字列をsystem()に渡す必要があります。文字列を簡単に作成する方法については、snprintF()をご覧ください。

+0

あなたの返事をありがとう。カーネルにもっと近づきたいと思っているだけなので、私はinitを使って作業しています。私のプログラムは以下の通りです。int main() { \tシステム( "/ sbin/clear.sh"); //画面をクリアする簡単なシェルスクリプト \tシステム( "/ sbin/name"); //私の前に実行したいプログラム \tシステム( "/ sbin/sleep.sh"); \tシステム( "/ sbin/clear.sh"); \tシステム( "/ sbin/init 2"); //引数2のinitへの私の呼び出し } – Stealth

1

system("/bin/echo wibble wobble"); 

しかし、あなたはほぼ確実にそれを行うにはしたくありません。試してもシステムがそれ以上起動しないときは、次回はinittabを編集して、initがあなたのプログラムを実行するようにします。

+0

あなたの返事をありがとう。私は印刷に関心がありませんが、それを実行します。システム( "/ sbin/init 1")を書くと、initはパラメータ1で実行されます。 – Stealth

1

システム(3)はサブルーチンを呼び出すのと似ているので、fork()を使用して子プロセスを作成し、次にexecvp()を呼び出す必要があります。

あなたは多分とにかく... `init`が上で動作する最初のものであってはならない置き換えて、「GNU Linuxの初心者で」なら、あなたはおそらく` system`たくないPipe, Fork, Exec and Related Topics

関連する問題