■掲示板に戻る■
■過去ログ倉庫めにゅーに戻る■
質問ですよ。
- 1 名前: 出題者 投稿日: 2000/12/14(木) 09:00
- 今、実行しているオブジェクトの名称を出力することってできますか?
int main(void)のままで行う事が要求仕様です。
(mainに引数はなし)
- 2 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/14(木) 09:05
- *実行ファイル名のことなら
printf( "%s\n", argv[0] );を試してみよう。
*今実行している関数名なら
C99から取り入れられた__FUNC__マクロを試してみよう。
- 3 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/14(木) 09:28
- >>2
>*実行ファイル名のことなら
>printf( "%s\n", argv[0] );を試してみよう。
に関しては、mainに引数がなきゃだめじゃないですか?
- 4 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/14(木) 09:42
- 1 単発で質問スレッドを立てる
2 自分の環境を明らかにしない
3 ありがちな定型、出来るか出来ないか二者択一で質問する
以上の理由から逝って良いことが決まりました
- 5 名前: 1 投稿日: 2000/12/14(木) 10:07
- コンパイラはGCC
OSはRED HAT 6.1です。
OSやコンパイラ依存じゃない方法が理想です。
- 6 名前: 2 投稿日: 2000/12/14(木) 10:34
- >>1
なんでint main( int argc, char **argv )が
だめなのかわかりません。
argvが使えない環境なら決め打ちするとか。。。
思いっきりOS依存の方法だけど、
POSIX規格のgetpidを使って
/proc/(getpidの戻り値)/cmdlineを読むとか。
- 7 名前: 4 投稿日: 2000/12/14(木) 12:25
- //力業-単発質問スレ立てるなバージョン
#include <stdio.h>
int main()
{
char*** pArgv = (char***)(&pArgv + 4);
puts(*pArgv[0]);
return 0;
}
- 8 名前: 1 投稿日: 2000/12/14(木) 12:50
- >>7
素晴らしい案ですが、
Mainのモジュールには手を入れられないんです。
むむー。
- 9 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/14(木) 13:02
- スタートアップのソースをいじってしまえば?
- 10 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/14(木) 13:47
- 案1:プロセスIDを取得する
psの出力結果をpopoenで読み込み
プロセスIDをキーとしてコマンドの検索を行なう
案2:要求仕様を引っくり返し、argv[0]を静的変数かなんかに
保存してもらうように働きかける
案3:ばっくれる(オススメ)
- 11 名前: sage 投稿日: 2000/12/15(金) 08:41
- 案3に決定!!
- 12 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/15(金) 23:37
- 逝け
- 13 名前: sage 投稿日: 2000/12/16(土) 02:50
- むなしい。
- 14 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/16(土) 10:28
- >int main(void)のままで行う事が要求仕様です。
無理。
仕様がmain()の引き数を規定しているのなら
オブジェクト名称の取得方法も仕様で規定するべき。
仕様記述の粒度が揃っていないからね。
- 15 名前: 名無しさん@お蝮いっぱい。 投稿日: 2000/12/16(土) 10:49
- つーか、argvがあっても、得られるのはargv[0]でしかないんだろ?
てきとーなプログラムからexec*使って動かされるなら何が入ってたっておかしくない。
何にせよ、"オブジェクトの名称"が何を差すか今一つ不明だが設計から見直したほうがいい。
- 16 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/16(土) 15:15
- オブジェクト=クラスインスタンスなら、自分のオブジェクト名を
返す関数定義するしかないかな。
Javaなら、クラス名引っ張ってくる関数すでにあるけど。
- 17 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/16(土) 16:46
- つーか逝け