掲示板
Powered by OTD
この記事は、K.Maebashi's BBSの過去ログです。
書き込む場合は、新しい掲示板へお願いします。
[日付順表示] | [日付順インデックス] | [スレッド順インデックス]


新規投稿 | 開設者ホームページへ戻る | ヘルプ


[600] Re:質問
返信


投稿者: ishikawa
2004/01/27 20:58

Mail:   Link:
  > だいたいできると思うんですが、細かいところで苦労するかもしれず、
レスありがとうございます。一応CygWinでやってみようかなと思います。
(linuxをインストールすれば早いかもしれませんが、うちの環境は無線LANなので設定が厳しい・・w)

> それはそうと、この掲示板では、ネットワークプログラミングについて
> かつて話題になったことがあります。
>
> http://bbs9.otd.co.jp/maebashi/bbs_plain?base=32&range=1
>
> こっちでは、WinSockでいいやん、という話になったようですね。
参考にさせていただきます。

> で、私は、この議論についての記憶はあったのですが、発掘するのに
> えらく苦労しました。タイトルが不適切だからです(まあタイトル
> 変えずにレス付け続けた私も悪いですが)。
> というわけでそのへんはishikawaさんもちょっと考慮していただけると
> 嬉しいかなあ、と。
スイマセン以後気をつけます。


[599] Re:質問
返信


投稿者: (ぱ)
2004/01/24 13:48

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 > よく本屋に行ったら Linux対応のネットワークプログラミング と書かれている本
> を見かけるんですが、Windows上でもCygWinをインストールすればそのネットワーク
> プログラムは実行させることはできますか?

だいたいできると思うんですが、細かいところで苦労するかもしれず、
私はやったことないので誰か詳しい人がレスしてくれないかなあ、
と思っていたのですが(他力本願)

それはそうと、この掲示板では、ネットワークプログラミングについて
かつて話題になったことがあります。

http://bbs9.otd.co.jp/maebashi/bbs_plain?base=32&range=1

こっちでは、WinSockでいいやん、という話になったようですね。

で、私は、この議論についての記憶はあったのですが、発掘するのに
えらく苦労しました。タイトルが不適切だからです(まあタイトル
変えずにレス付け続けた私も悪いですが)。
というわけでそのへんはishikawaさんもちょっと考慮していただけると
嬉しいかなあ、と。


[598] Re:MDI
返信


投稿者: (ぱ)
2004/01/22 23:39

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 > >  いまちょっと調べたんですが、NoTopMostって「最上位指定のないウインドウの
> > 中で一番『上に』位置させる」という指定ではないですか?
> 説明がすごく下手なので申し訳ありません。今やろうとしていることが
> まさにその通りなのです.指定したwindowを現在アクティブなwindowの
> 真下に持っていく。ABCDと4つのwindowsがありAが現在アクティブで
> Dを指定してADBCとしたい。

既にヤスラカさんからレスがついていますが、
「最上位指定のあるウインドウ」と「アクティブなウインドウ」は
別物なわけですね。「最上位指定のある(TopMostな)ウインドウ」というのは、
たとえばIMEのツールバーのように、アクティブであるなしには関係なく
常に前面に表示されるウインドウのことなのだと思います。

んで、

>NoTopMostって「最上位指定のないウインドウの
>中で一番『上に』位置させる」という指定ではないですか?

私はドキュメントを途中まで読んでこう書いてしまいましたが、
続きに

>ウィンドウが既に非最上位ウィンドウとなっているときは、このフラグは無効です。

とあるように、非最上位ウィンドウの時は無効なんですね。失礼しました。
いろいろ情報ありがとうございました。私も勉強になりました。 > ヤスラカさん

以下余談ですが、
昔UNIXのX Windowの仕事をしていたとき、お客さんにはよく「TopMostウインドウ」
のようなウインドウを出して欲しい、と言われたものです。でもXにはそういう
ものはありませんでした。

このへん、職人気質のUNIXプログラマは、「最上位」と「それ以外」の2段階という
恣意的な分け方を嫌ったのかしら、などと思ったりします。
プログラマといえば「0, 1, たくさん」しか数えられないものですし。

でも実用上、TopMostなウインドウが欲しいというのもわかるんですよね。

 お客さん向けに不具合・要望通知のフォーマットを作り、優先順位の項を
 入れたら、ほとんど全ての通知を優先順位「高」で出してきた。

なんて話もよく聞きますが、
現状のWindowsアプリでは、そんな混乱には陥らず、結構便利に使えていると
思います。


[597] Re:MDI
返信


投稿者: ヤスラカ
2004/01/22 12:39

Mail:   Link:
 ヤスラカです。

MFCは使ってないのですが、Win32APIは叩いてたりします。
古い手法だと自覚してます(^^;

そんな「古い」私の理解では、2つの誤解をされているように思います。

とりあえず、MSDN Onlineより
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_mfc_cwnd.3a3a.setwindowpos.asp
>wndNoTopMost
(中略)
>ウィンドウが既に非最上位ウィンドウとなっているときは、このフラグは無効です。

第一に、最上位にないウィンドウに対してNoTopMostしようとしても、何も起こりません。
第二に、ここでいう「最上位(TopMost)」というのは「常に最前面に表示」とか言われているもので、
実際のZ-Orderが最上位と言う意味ではないと(私は)理解しています。

Top系のフラグが3種類ありますが、これらはつまり、
・wndTop は、"TopMost"以外で先頭に
・wndTopMost は、ウィンドウに"TopMost"属性を与える
・wndNoTopMost は、ウィンドウから"TopMost"属性を削除する
という事だと考えます。
MDIアプリではこの辺の動作が完全ではないので、
MDIではないもので実験してみると良いと思います。

おっしゃっている事をやろうとするなら、かなり泥臭くて見た目も悪いですが、
1.Z-Orderを2位にしたいウインドウを wndTop に指定
2.Z-Orderを1位にしたいウィンドウを wndTop に指定
という2段構えにならざるを得ないと思います。

ABCDのウィンドウのDが、Aに対する環境ウィンドウ(ツールボックス等)であるなら、
DはMDIChildではなく、独立したダイアログウィンドウにし、
これをTopMostにする等の方法が一般的だと思います。



[595] Re:MDI
返信


投稿者: きり
2004/01/22 02:10

Mail:   Link:
 (ぱ)さん投稿有難うございます.

> > CMyView * pMyView = ( CMyView * ) pDoc -> GetView(RUNTIME_CLASS(CMyView) );
> > CMDIChildWnd * pChild = ( CMDIChildWnd * pMyView -> GetParent();
> > pChild ->SetWindowPos( &pChild->wndNoTopMost, 0,0,0,0,SWP_SHOWWINDOW);
>
>  このコードではうまくいかなかったのですか? うまくいかなかったとしたら、
> どううまくいかなかったのでしょうか?
何も反応無しです.しかしpChild→ActivateFrame(SW_SHOW)とすると
指定したwindow(今回は気をつけてみました.)が一番トップに表示され
アクティブになるのでハンドルの取得方法は正しいと思います.

>  いまちょっと調べたんですが、NoTopMostって「最上位指定のないウインドウの
> 中で一番『上に』位置させる」という指定ではないですか?
説明がすごく下手なので申し訳ありません。今やろうとしていることがまさにその通りなのです.指定したwindowを現在アクティブなwindowの真下に持っていく。ABCDと4つのwindowsがありAが現在アクティブでDを指定してADBCとしたい。
今は、このSetWindowPosを研究しているのですがあまり成功例がないようです。

それでは、


[594] Re:MDI
返信


投稿者: (ぱ)
2004/01/21 23:17

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 > ウィンドウズをアクティブウインドウズの
> 真後ろに持っていきたいのですが

この「真後ろ」というのがよくわからなかったのですが(通常「真後ろ」と
いえばXYの座標が一致していることを意味すると思うんですが、
文脈からしてそういうことをしているようにも見えないし)、
よく考えてみると、

「現在アクティブで一番上に表示されているウインドウの、
 『ひとつ下の階層』に表示させたい」

という意味でしょうか?

だとすると、現在アクティブなウインドウがTOPMOSTなウインドウでない限り
「できない」ように思えますが、どうでしょうか? > 詳しい方


[593] Re:MDI
返信


投稿者: (ぱ)
2004/01/21 22:46

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 私はMFCはずいぶん前にちょっとやったきりで、そのときはウインドウの
前後関係をいじったりはしてませんし、今手元に開発環境もないので
試すこともできませんが…

> MSDNやネットで検索した結果SetWindowPosにて
> 自由にWindowsのZオーダーを変更できる
> ことが分かったのですがいまいち使い方
> が分かりません。

 検索したらこんなのが見つかりました。
http://forums.belution.com/ja/vc/000/001/76.shtml

> CMyView * pMyView = ( CMyView * ) pDoc -> GetView(RUNTIME_CLASS(CMyView) );
> CMDIChildWnd * pChild = ( CMDIChildWnd * pMyView -> GetParent();
> pChild ->SetWindowPos( &pChild->wndNoTopMost, 0,0,0,0,SWP_SHOWWINDOW);

 このコードではうまくいかなかったのですか? うまくいかなかったとしたら、
どううまくいかなかったのでしょうか?
 それを書いたほうが有効な回答が得られやすいと思います。

 いまちょっと調べたんですが、NoTopMostって「最上位指定のないウインドウの
中で一番『上に』位置させる」という指定ではないですか?
 上記のページではwndBottomを指定してますし。
 これは素人の推測ですので外してましたらすみません。

# 余談ですけど、「ウインドウズ」といったらOSなのであって、画面に表示される
# アレのことは「ウインドウ」でよいと思うです。:-)


[592] 質問
返信


投稿者: ishikawa
2004/01/21 22:35

Mail:   Link:
 よく本屋に行ったら Linux対応のネットワークプログラミング と書かれている本
を見かけるんですが、Windows上でもCygWinをインストールすればそのネットワーク
プログラムは実行させることはできますか?


[591] MDI
返信


投稿者: きり
2004/01/21 02:42

Mail:   Link:
 MDIを使用してアプリを開発しております。
複数ウィンドウズを開いてある指定した
ウィンドウズをアクティブウインドウズの
真後ろに持っていきたいのですが
どうしたらいいのか迷っています。
MSDNやネットで検索した結果SetWindowPosにて
自由にWindowsのZオーダーを変更できる
ことが分かったのですがいまいち使い方
が分かりません。
どなたかご存知の方いらっしゃったらご教授
いただけないでしょうか。
参考にコード記します。
環境はVS6/windows2000です。

CMyView * pMyView = ( CMyView * ) pDoc -> GetView(RUNTIME_CLASS(CMyView) );
CMDIChildWnd * pChild = ( CMDIChildWnd * pMyView -> GetParent();
pChild ->SetWindowPos( &pChild->wndNoTopMost, 0,0,0,0,SWP_SHOWWINDOW);


[590] Re:配列とポインタの完全制覇について
返信


投稿者: (ぱ)
2004/01/13 20:58

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 > はじめておじゃまします。Dukeと申します。

はじめまして。

> 同ページ内の「配列→ポインタの読み替え」という単元で述べられている
> scanfを用いた例えですが、これは正常に動いてしまうと結論付けてよい
> ものなでしょうか?

もちろんこの書き方は正しくないわけで、「正常に動いて『しまう』」の、
この『しまう』というあたりに、
これは正常に動いているように見えるけれど正しくないのだ、
という意図を含めたつもりでしたが、もっとはっきり書いたほうが誤解がないですね。
多少ですが、修正しておきました。ご意見ありがとうございました。


[589] 配列とポインタの完全制覇について
返信


投稿者: Duke
2004/01/13 17:31

Mail:   Link:
 はじめておじゃまします。Dukeと申します。
今日始めてHP内の「配列とポインタの完全制覇」を読ませていただきました。

そこで一つ思うことがあるのでこちらに書かせていだたきます。
同ページ内の「配列→ポインタの読み替え」という単元で述べられている
scanfを用いた例えですが、これは正常に動いてしまうと結論付けてよい
ものなでしょうか?

実際の運用を正しく述べるのであれば、
「正常に動いているように誤認してしまう」
という形で記述するべきだと愚考します。

突然失礼かと思いましたが書き込ませていただきました。


[588] Re:Linuxでプロセス情報取得したい
返信


投稿者: とも
2004/01/07 19:32

Mail:   Link:
 > unsigned long に cast する前に
> while(*ep++);
> を実行してますね。
> これがキモなんです。
> 1番目の実行結果の場合、この
> while(*ep++);
> を行っていません。従って、環境変数を表示しています。
> 2番目の実行結果の場合、この
> while(*ep++);
> の後に実行しています。従って、環境変数の領域の後に
> ある、unsigned long が (ID, 値) の 2 つ組で連続して
> いる領域を表示しているわけです。つまり、全く違うもの
> を表示しているわけですから、
>
> なお、unsigned long の 2つ組 の領域は、IDが 0 と
> なったところで終わります。

やっと理解できました。
while(*ep++);
で環境変数の領域分だけポインタをすすめたあとにunsigned longの
領域があるのですね。

検証してみました。

while(*ep++);
while(*ep){
printf("ep = %ld , %ld\n",*ep,ep[1]);
ep+=2;
}
printf("ep = %ld , %ld\n",*ep,ep[1]);

実行結果:
ep = 16 , -1075054081
ep = 6 , 4096
ep = 17 , 100
ep = 3 , 134512692
ep = 4 , 32
ep = 5 , 6
ep = 7 , 1073741824
ep = 8 , 0
ep = 9 , 134513616
ep = 11 , 0
ep = 12 , 0
ep = 13 , 0
ep = 14 , 0
ep = 15 , -1073747345
ep = 0 , 0

while(*ep++) をコメント化すると,環境変数の領域もIDが0で終了して
いました。

実行結果:
ep = -1073742852 , -1073742842
ep = -1073742829 , -1073742804
ep = -1073742696 , -1073742673
ep = -1073742657 , -1073742625
ep = -1073742575 , -1073742556
ep = -1073742545 , -1073742501
ep = -1073742481 , -1073742468
ep = -1073742455 , -1073742441
ep = -1073742433 , -1073742401
ep = -1073742389 , -1073742378
ep = -1073742368 , -1073742354
ep = -1073741903 , -1073741880
ep = -1073741862 , -1073741849
ep = 0 , 16

わかりやすい説明をありがとうございました。


[587] Re:Linuxでプロセス情報取得したい
返信


投稿者: kit
2004/01/07 18:08

Mail:   Link:
 > しかし,変数 environ をunsigned long型にcastして使用すると,番号が
> 表示されますが,この「番号」と先の文字列とはどのような関連が
> あるのでしょうか?

全く関連ありません。

unsigned long に cast する前に
while(*ep++);
を実行してますね。
これがキモなんです。
1番目の実行結果の場合、この
while(*ep++);
を行っていません。従って、環境変数を表示しています。
2番目の実行結果の場合、この
while(*ep++);
の後に実行しています。従って、環境変数の領域の後に
ある、unsigned long が (ID, 値) の 2 つ組で連続して
いる領域を表示しているわけです。つまり、全く違うもの
を表示しているわけですから、

なお、unsigned long の 2つ組 の領域は、IDが 0 と
なったところで終わります。従って、
while(*ep){
printf("ep = %ld\n",*ep);
ep+=1;
i++;
}
このループは誤りです。これだとIDではなく、値の
方が 0 になったところで、終わりだと誤認してしまう
可能性があります。正しくは、
while (*ep){
printf("ep = %ld, %ld\n", *ep, ep[1]);
ep += 2;
}
のようにする必要があるでしょう。
(i++ は無意味なので除きました。)

このあたりについては Linux というよりは、C言語の勉強が
必要ではないかと思います。


[586] Re:Linuxでプロセス情報取得したい
返信


投稿者: とも
2004/01/07 15:11

Mail:   Link:
 > 最近の Linux は、変数 environ の指す環境変数の領域の直後に、
> 各種のパラメータを渡すための領域があり、そこに各種の情報が
> (情報のID, 情報の値) というペアで入っています。
> このなかで、情報のID==17 に対応する部分にある
> 値が、HZ です。

ご説明ありがとうございました。
まだ,理解できていないので質問させてください。

変数 environ を使用して環境変数を表示するプログラムを作成し,
実行すると環境変数が文字列で表示されます。

extern char **environ ;

main( int argc, char *argv[], char *envp[] )
{
int i ;
printf("envp == 0x%x\n",envp );
printf("environ == 0x%x\n",environ );
for( i=0 ; environ[i] ; i++ )
printf("environ[%d]==0x%x, \"%s\"\n",i,environ[i],environ[i] );
}

実行結果:
envp == 0xbfffe47c
environ == 0xbfffe47c
environ[0]==0xbffffbfc, "USER=XXXXXXXX"
environ[1]==0xbffffc06, "LOGNAME=XXXXXXX"
environ[2]==0xbffffc13, "HOME=XXXXXXXX"



省略

しかし,変数 environ をunsigned long型にcastして使用すると,番号が
表示されますが,この「番号」と先の文字列とはどのような関連が
あるのでしょうか?

#include<stdio.h>
#include <unistd.h>

extern char **environ;

int main( int argc, char *argv[], char *envp[] )
{
int i=0;
unsigned long *ep = (unsigned long *)environ;
while(*ep++);

printf("envp == 0x%x\n",envp );
printf("environ == 0x%x\n",environ );
while(*ep){
printf("ep = %ld\n",*ep);
ep+=1;
i++;
}
exit(0);
}

実行結果:
envp == 0xbffff44c
environ == 0xbffff44c
ep = 16
ep = -1075054081
ep = 6
ep = 4096
ep = 17
ep = 100
ep = 3
ep = 134512692
ep = 4
ep = 32
ep = 5
ep = 6
ep = 7
ep = 1073741824
ep = 8

よろしくお願い致します。


[585] Re:ヘッダファイルの意味(ポインタ完全性覇)
返信


投稿者: ishikawa
2004/01/07 11:45

Mail:   Link:
 なるほど・・、ありがとうございます、分かりました。
 


[584] Re:ヘッダファイルの意味(ポインタ完全性覇)
返信


投稿者: (ぱ)
2004/01/06 23:05

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 >#define NULL ((void*)0) と定義されてるとします。
>もしプログラムのなかにNULLが現れたら(ヌルポインターが必要な場所に)
>NULL→マクロで((void*)0)に変換→コンパイラがヌルポインターに変換 
>ってことでいいんですかね?

NULL→マクロで((void*)0)に変換
 →コンパイラが、この中の「0」をヌルポインターに変換 

です。

>なにが聞きたいか率直にいいますと「((void*)0)自体がヌルポインターじゃないんです
>か?だから「→コンパイラがヌルポインターに変換」はいらないんじゃないかと・・・」
>っていうことを聞いてるわけです。

私がポインタ完全制覇で書いているのも、C-FAQに書いてあるのも、
「コンパイラは、文脈に応じて、定数0をヌルポインタに変換する」
ということです。

普通、「0」と書けばその型はintですが、ポインタとして扱われるべき
文脈では、ヌルポインタに変換されます。

char *a = 5;

では警告が出るくせに

char *a = 0;

なら警告が出ないのはそのためです。

ただし、たとえばvoid func(char *p)という関数にヌルポインタを渡そうとして
「func(0)」と書くと、もしプロトタイプ宣言が無ければ、正しくヌルポインタが
渡らない可能性があります。

NULLを「((void*)0)」に#defineしている処理系というのは、こういう
問題を避けるため、「ポインタとして扱われるべき文脈」を強制的に
作り出しているわけです。

その意味では、「((void*)0)」というひとかたまりで考えれば、
これをヌルポインタだと考えても差し支えはないでしょう。


[583] Re:Linuxでプロセス情報取得したい
返信


投稿者: kit
2004/01/06 18:52

Mail:   Link:
 誤解をしていると思います。
ループ内で *ep と *environ を並べて表示してますが、
この両者には全く関連がありません。

最近の Linux は、変数 environ の指す環境変数の領域の直後に、
各種のパラメータを渡すための領域があり、そこに各種の情報が
(情報のID, 情報の値) というペアで入っています。
このなかで、情報のID==17 に対応する部分にある
値が、HZ です。

従って、

> ・なぜ,AT_CLKTCKの初期値を17としているでしょうか?

ID==17のところにHZが入っているというのが仕様だから

> ・environの値が17になったとき,次のポインタを返却して終了していますが,
> なぜなのでしょうか?(仕様?)

この手続きは、ID==17に対応する値を探してそれを返しているわけです。
つまり仕様。

> ・ep=17となるときは,環境変数MAILが対応していますが,2つの値は関連が
> あるのでしょうか?それともそもそもの考え方がおかしい?

対応していないし、関連はない

というのが答となるでしょう。


[582] Re:Linuxでプロセス情報取得したい
返信


投稿者: とも
2004/01/06 15:02

Mail:   Link:
 > > 実行ファイル名: readlink(2) システムコールで "/proc/プロセスID/exe" を読む
> > "/proc/プロセスID/exe" だけは、Linux 固有です。
>
> tcshを表示したい場合,psコマンドをたたくと
> % ps -efa | grep tcsh
> XXXXX 9789 9788 0 09:58 pts/0 00:00:00 -tcsh
>
> のようになりますが,readlink(2) システムコールで"/proc/プロセスID/exe"
> を読み込むと,プログラム実行結果が絶対パスで表示されてしまいます。
>
> ex.) exe -> /usr/local/pkg/tcsh/6.12.00/bin/tcsh の場合
> % ./a.out
> UID PID ELAPSED TIME COMMAND
> XXX XXXX 2:58:32 0:00 /usr/local/pkg/tcsh/6.12.00/bin/tcsh
>
> COMMANDの部分を「-tcsh」と表示するには,readlinkではだめなようです。
> どこからファイル名を取得すればよろしいでしょうか?

/proc/プロセスID/cmdlineから取得することでできました。
お手数おかけしました。


[581] Re:Linuxでプロセス情報取得したい
返信


投稿者: とも
2004/01/06 13:06

Mail:   Link:
 > 実行ファイル名: readlink(2) システムコールで "/proc/プロセスID/exe" を読む
> "/proc/プロセスID/exe" だけは、Linux 固有です。

tcshを表示したい場合,psコマンドをたたくと
% ps -efa | grep tcsh
XXXXX 9789 9788 0 09:58 pts/0 00:00:00 -tcsh

のようになりますが,readlink(2) システムコールで"/proc/プロセスID/exe"
を読み込むと,プログラム実行結果が絶対パスで表示されてしまいます。

ex.) exe -> /usr/local/pkg/tcsh/6.12.00/bin/tcsh の場合
% ./a.out
UID PID ELAPSED TIME COMMAND
XXX XXXX 2:58:32 0:00 /usr/local/pkg/tcsh/6.12.00/bin/tcsh

COMMANDの部分を「-tcsh」と表示するには,readlinkではだめなようです。
どこからファイル名を取得すればよろしいでしょうか?

よろしくお願い致します。


[580] Re:Linuxでプロセス情報取得したい
返信


投稿者: とも
2004/01/06 12:39

Mail:   Link:
 > う、すいません。最新のソースだと proc/sysinfo.c の init_libproc()
> を見るのが良いようです。HZ で grep すると、すぐ見つかります。
> 3.1.11 を見ると、sysconf(_SC_CLK_TCK) を使うのも、もはや古い方法で
> 良くないみたいですね。
> find_elf_note() で Hertz を得るのが正しいようです。
>

procpsのソースを参考とし,下記のようなソースを作成したら
Hertzの取得はできましたが,いまいち中身がよくわかっていません。

#include<stdio.h>
#include <unistd.h>

extern char **environ;
unsigned long long Hertz;

#ifndef AT_CLKTCK
#define AT_CLKTCK 17 /* frequency of times() */
#endif

#define NOTE_NOT_FOUND 42

//extern char** environ;

/* for ELF executables, notes are pushed before environment and args */
static unsigned long find_elf_note(unsigned long findme){
unsigned long *ep = (unsigned long *)environ;
while(*ep++);
while(*ep){
printf("ep = %ld string = %s\n",*ep,*environ);
if(ep[0]==findme) return ep[1];
ep+=2;
environ+=2;
}
return NOTE_NOT_FOUND;
}

int main()
{

Hertz = find_elf_note(AT_CLKTCK);

printf("Hertz = %ld\n",Hertz);

exit(0);
}

実行結果:
% ./a.out
ep = 16 string = USER=XXXXX
ep = 6 string = HOME=XXXXX
ep = 17 string = MAIL=XXXXX
Hertz = 100

ユーザ環境を表示する変数environを使用して取得できるのですが,
・なぜ,AT_CLKTCKの初期値を17としているでしょうか?
・environの値が17になったとき,次のポインタを返却して終了していますが,
なぜなのでしょうか?(仕様?)
・ep=17となるときは,環境変数MAILが対応していますが,2つの値は関連が
あるのでしょうか?それともそもそもの考え方がおかしい?

よろしくお願い致します。


[579] Re:Windowsの環境まわり
返信


投稿者: れぷ
2004/01/06 02:34

Mail:   Link:
 あけましておめでとうございます。
こちらこそよろしくお願いいたします。

年跨ぎスレになってしまいました。

> 最近でもないですが、COMの使い方についてかつて調べたとき
> 結構苦労しました。MFCあたりも結局MSDNを引くことになっちゃって、
> 「導入用の教科書」ってあんまりなかった気がします。
そう言われてみると確かにCOMの本ってほとんど見かけないですね。
MFCもスケルトンをちょっと弄って終わりですし。
# 残念ながら私はどっちもやったことがないのですけど(^^;

> Oracleはマニュアル自体高くて分厚かったような。
あ、あの白いマニュアルですね。
会社は1セットしかないとこが多くて、
業務と方式で取り合いになるから棚に陳列されているだけ、
なんてプロジェクトも結構ありますね。
今はPDFのものがあるから便利ですけど。


[578] Re:ヘッダファイルの意味(ポインタ完全性覇)
返信


投稿者: ishikawa
2004/01/06 01:20

Mail:   Link:
 追記 http://www.catnet.ne.jp/kouno/c_faq/c5.html#0この辺読んだんですがどうも
分からないので。


[577] Re:ヘッダファイルの意味(ポインタ完全性覇)
返信


投稿者: ishikawa
2004/01/06 01:15

Mail:   Link:
 >> たとえばword_manage.hで、先頭の#ifndefが#ifdefになっていて、
すいません、モロこれでした。お騒がせしました。

あと些細なことかもしれませんがちょっと気になったので。
ヌルポインターのことです。
#define NULL ((void*)0) と定義されてるとします。
もしプログラムのなかにNULLが現れたら(ヌルポインターが必要な場所に)
NULL→マクロで((void*)0)に変換→コンパイラがヌルポインターに変換 
ってことでいいんですかね?
なにが聞きたいか率直にいいますと「((void*)0)自体がヌルポインターじゃないんです
か?だから「→コンパイラがヌルポインターに変換」はいらないんじゃないかと・・・」
っていうことを聞いてるわけです。
お願いします。



[576] Re:ヘッダファイルの意味(ポインタ完全性覇)
返信


投稿者: (ぱ)
2004/01/05 22:49

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 > でも、
> 「未定義のシンボル NULL」
> というエラーがでるんですが・・・。

うーん。でも、間接的にstdio.hを#includeしているはずだ、ということは
納得されますよね?
ソースは、ダウンロードではなく、手で打ち込んでますか?
だとすると入力ミスかも。

たとえばword_manage.hで、先頭の#ifndefが#ifdefになっていて、
word_manage.hがまるごと効いていないとか。


[575] Re:ヘッダファイルの意味(ポインタ完全性覇)
返信


投稿者: ishikawa
2004/01/05 21:41

Mail:   Link:
 でも、
「未定義のシンボル NULL」
というエラーがでるんですが・・・。


[574] Re:ヘッダファイルの意味(ポインタ完全性覇)
返信


投稿者: (ぱ)
2004/01/05 20:06

Mail:PXU00211@nifty.ne.jp   Link:http://member.nifty.ne.jp/maebashi/
 > P261のlist5-10、<stdio.h>いりますよね。

List5-10ではword_manage_p.h(List5-9)を#includeしており、
word_manage_p.hはword_manage.h(List5-2)を#includeしています。
そしてそのword_manage.hでstdio.hを#includeしていますから、
List5-10でことさらに#includeする必要はないはずです(しても
よいですが)。

あとは作法の問題で、「そのヘッダファイル/ソースファイルで必要とされる
型やマクロを宣言しているヘッダファイルは、必ずそこで#includeしておけ」
という流儀の人もいるかもしれませんが、コンパイラに怒ってもらえない
ような作法はきっと守れないので、あまり意味がないのでは、と私は思います。


[573] Re:Linuxでプロセス情報取得したい
返信


投稿者: とも
2004/01/05 19:21

Mail:   Link:
 > そもそも、uptime や start を、char 型の変数に保持
> してるってことがなんか変ですね。Linux 上で char 型
> を使った場合、-128〜127の値しか保持できませんから
> uptime や start を保持するには不十分です。
>
> /proc/$PID/status の該当行を一度 char 型の配列に
> 取得したあと、sscanf() 等を使って long 型の数値に
> 変換する必要があるのでは?
>

uptime,startをchar型の配列に取得後,関数atolを使用して,
long型に変換することにより,上手く処理できました。

ありがとうございました。


[572] Re:ヘッダファイルの意味(ポインタ完全性覇)
返信


投稿者: ishikawa
2004/01/05 13:19

Mail:   Link:
 P261のlist5-10、<stdio.h>いりますよね。
 


[571] Re:ヘッダファイルの意味(ポインタ完全性覇)
返信


投稿者: ishikawa
2004/01/04 20:52

Mail:   Link:
 すいません、ちゃんと警告でました。僕の勘違いだったみたいです。
開発環境にDeveloper使ってるですが、どうもデフォルトで「警告表示なし」になってた
みたいです、「あり」にしたら普通にでました。

ありがとうございました。


ひとつ前の過去ログ | 目次へ | ひとつ後の過去ログ