2011-12-18 3 views
2

演習7-1。 argv [0]のように、呼び出された名前に応じて、大文字を小文字か小文字かを大文字に変換するプログラムを作成します。プログラムを書くことに興味を持ってあなたのそれらのために K&R:演習7-1 - これはどのように呼び出すのですか?

、あなたはここでサンプルソリューションを見つけることができます: http://users.powernet.co.uk/eton/kandr2/krx701.html

私の質問は、しかし、正確にどのようにプログラムを起動しますか? argv [0]はプログラムの名前を指しますが、プログラムのファイルパスに加えてargv [0]でprintf()を実行すると、code :: blocks IDEでプログラムを実行すると、/ homeからのフルパスが出力されます。 './upper'(引用符なし)のコマンドラインでプログラムを実行しようとすると、argv [0]にはプログラム名の前に './'が含まれます。

PATH環境変数にプログラムパスを追加しなくても、このプログラムを呼び出すことはできますか?

+0

あなたは宿題にしていますか?ターゲットプラットフォーム(Windows、Linuxなど)は何ですか? –

+0

宿題の割り当てではありません - 私は趣味としてしかコード化していません。私のプラットフォームはArch Linux仮想マシンです。 Windowsでのコーディング(Cygwinのような* nixエミュレータなし)はあまりにも多くの問題を引き起こします。 –

+0

わかりました。Microsoft APIを使用すると、作業ディレクトリを特定して質問を簡単にすることができます。 * nixの世界には、私がまだ遭遇する必要のないものがおそらく存在します。 –

答えて

2

あなたは、一度どんな出力ファイル名を、それをコンパイルすることができます(例:my_c_programを)とbashとともに、使用:

$ bash -c "exec -a upper ./my_c_program" 

:あなたは、それは別のシェルで実行したい場合

$ exec -a upper ./my_c_program 
foo 
FOO 

$ exec -a lower ./my_c_program 
BAR 
bar 

基本的には、構文はexec -a <newname> <command>であり、<newname>argv[0]となります。

+0

それはそうしました。ありがとう!! –

+0

関連していないディレクトリからフルパスでアプリケーションを実行するとどうなりますか? –

+0

@ M.Babcock: '-a'スイッチが渡されている限り、それでも動作します。 – netcoder

3

最後の/文字列をスキャンして、そのポイントのすべての文字を使用できますか?あなたはそれがargv[0]を解析する方法であなたのプログラムをより柔軟にすることができ、

char *args = {"Uppercase", NULL}; 

execve("/path/to/your/Uppercase", args); 

それとも;:

+0

私はあなたが何を意味するのか正確には分かりません。あなたは例を挙げることができますか? –

1

ちょうど右のセットの引数を持つあなたのためのexecを行いexecv(3)周りに少しラッパーを、書くことができますディレクトリ部分が与えられている場合は、プログラムの名前に簡単にアクセスする方法については、strrchr(3)を参照してください。

2

通常、argv[0]は、プログラムを実行するコマンドプロンプトに入力する内容を正確にに反映します。あなたのプログラムがPATH環境変数に含まれているディレクトリにある場合は、ディレクトリ名を./またはフルパスで指定する必要はありません。

ただし、プログラムがPATHディレクトリに存在する場合でも、ユーザーは実行可能ファイルへのフルパスを入力することがあります。あなたのプログラムはこれに対処する準備ができていなければなりません。

環境変数PATHの詳細と変更方法については、シェルのマニュアルを参照してください。

2

this answerをご覧ください。実行可能ファイルの場所を解決するために必要なアプリケーションの現在の作業ディレクトリを判断するための標準のPosixメソッドの使用について説明します。基本的にパスが絶対パスであるかどうかを判断し、それがそのまま実行されていない場合は(パス終端文字がarg [0]にあることを確認した後で)arg [0]を現在のパスに追加しますOSは残りの部分を把握する必要があります(私は信じています;深刻な* nix開発者をしてから数年経ちました)。

関連する問題