■掲示板に戻る■ ■過去ログ倉庫めにゅーに戻る■
質問ですよ。
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
つーか逝け