> dest[len] = NULL; とした場合、
>
> char dest[256];
> my_strncpy(dest, "src", sizeof (dest));
>
> の様に使うと、領域破壊を起こす可能性があるのではないでしょうか?
なるほど。
これは仕様の問題で、lenをどのような意味にするのが適当か、ということですよね。
私の場合、ある時期、メインフレームのデータ(テキストファイル)を処理する
プログラムを書いていた頃があるのですが、メインフレームのデータだと、
固定長の行で1行1レコードで、何桁目から何桁目まではこのデータ、と決まっている
ものが多いのです。こういうものから特定のデータを取り出すためには、
たとえばそのデータがSTARTカラムから始まる3桁のデータだったとすると、
my_strncpy(dest, &data[START], 3);
という書き方が便利なわけです。もちろんdestには十分な領域(256とか1024とか)を
取っておきます。
ここのmy_strncpyは、そういうものを想定していました。
# 前任者のソースが、strncpy()でデータを切り出して、以後'\0'で終端させないまま
# ずっとstrncpy()で扱うようになっていて、キレそうになりました。
…と、ここまで書いて、気になって確認してみました。そう考えるのだとすると、
p.301の記述と矛盾するように思います。
strncpy()の代用品という位置付けからしても、[len-1]にしておいた方が
よさそうですね。後で正誤表に入れておきます。
Webに転がっていたのでURLを引用。
http://www7.plala.or.jp/takamura/program/index.html
消されちゃうっぽいので興味のある方はお早めに。
私もこれから印刷して帰りの電車で眺めます。:-)
> 途中で送信してしまったようなので追記します。
>
> %ldにしてみたら警告が出なくなりました。ということはclock_tはlong型ってことで
> いいのでしょうか?ちょっと警告メッセージの意味がわからないのですが
> clock.c:16: warning: int format, clock_t arg (arg 2)
int format → 第1引数で指定してるフォーマットはintになっている。
clock_t arg (arg 2) → なのに対応する引数はclock_tではないか(第2引数)
ということでしょう。
clock_tはtypedefなので、longであるかどうかは処理系に依存するでしょうが、
たいていの処理系ではlongでいいんじゃないでしょうか。
通常、この手のtypedefは、具体的な型を隠蔽するために行うわけですが(もし
何らかの都合で型を変えたくなったとき、ユーザのプログラムの修正の必要がない)、
printfでは具体的な型を指定せざるを得ないのが困りものですね。
よくintをINTにtypedefしているプロジェクトなどがありますが(MSはそうですよね)、
printf()やscanf()は全部%dになっていたりします。あの手のtypedefは
どれぐらい意味があるんですかねえ?
始めまして。匿名での投稿失礼致します。
「C言語ポインタ完全制覇」の45ページの「NULLと0と'\0'と」に、
my_strncpy関数が掲載されていますが、そのコードの dest[len] = NULL;
の部分は、 dest[len - 1] = NULL; とした方が良いのではないでしょうか。
dest[len] = NULL; とした場合、
char dest[256];
my_strncpy(dest, "src", sizeof (dest));
の様に使うと、領域破壊を起こす可能性があるのではないでしょうか?
もちろん、NULLは'\0'とすべきなのは本の方にある通り言うまでもありませんが。
途中で送信してしまったようなので追記します。
%ldにしてみたら警告が出なくなりました。ということはclock_tはlong型ってことで
いいのでしょうか?ちょっと警告メッセージの意味がわからないのですが
早々とレスありがとうございました。おかげで目的の処理を達成できました。
> > # POSIX準拠の関数(のはず)だからUNIXなら間違いなく使えると思うのですが、
> > # Windowsだと...使えないのかなぁ?
とりあえず、timeと名前がついているヘッダーファイルをインクルードしてみましたが、
どうも使えないようです。
(gthr-posix.hというのもあったのですが、なぜかパスを指定しても見つけてくれない)
どのヘッダーファイルをインクルードすれば使えるようになるのでしょうか?
> 以前、(誰からか忘れましたが)いただいたsource codeを見つけました。
> NETで どこからか探してきたのかもしれません。
>
> Pentiamで、ある程度 高精度に時間を測れる関数の作り方です。
> とりあえず、linuxとcygwinでは動作するようです。
>
> windowsでも、使えるんだと思いますが、
> windows用のcompilerがないので未確認です。
> CPUの周波数は、固定にしてますので、環境に合わせて適当にどうぞ。
アセンブラの部分が良く分からないのですが頂いておきます。
ありがとうございます。
> まず、「cloak_t」とありますが、これは「clock_t」ですよね?
> これ以外の箇所は、全くこれと同じソースで試したと思って良いですか?
> # こういうところで無駄なやりとりを防ぐため、ソースはできるだけ
> # そのままcut&pasteしてください。
すみません。clock_tの間違いです。以後気をつけます。
> そりゃあ0が表示されるでしょう。今時のマシンで、1000回ループごときで
> 計測できるような時間がかかるとは思えません。
> 私のところでループ回数を100000000回に変えてみたところ、
> 「1470000」と表示されました。1.5秒くらいですね。
> うちのへっぽこマシン(Celeron333MHz)でこの成績です。
ループ回数を100000000回にしてみたところ、1271と結果を得ることができました。
僕の処理系では精度はmsecらしいです。
今回、ヘボイ質問をしてしまし申し訳ありませんでした。
もう少し考えてから書き込むべきだったと反省しています。
> うちで実験したところ、こう表示されました。
>
> gcc -o clocktest -Wall clock.c
> clock.c: In function `main':
> clock.c:16: warning: int format, clock_t arg (arg 2)
>
> 16行目の内容はこうです。
>
> printf("%d\n", hoge2 - hoge);
>
> エラーメッセージを見て、何が原因だと思いますか?
%ldにしてみたら警告が出なくなりました。ということはclock_tはlong型ってことで
いいのでしょうか?ちょっと
> # POSIX準拠の関数(のはず)だからUNIXなら間違いなく使えると思うのですが、
> # Windowsだと...使えないのかなぁ?
以前、(誰からか忘れましたが)いただいたsource codeを見つけました。
NETで どこからか探してきたのかもしれません。
Pentiamで、ある程度 高精度に時間を測れる関数の作り方です。
とりあえず、linuxとcygwinでは動作するようです。
windowsでも、使えるんだと思いますが、
windows用のcompilerがないので未確認です。
CPUの周波数は、固定にしてますので、環境に合わせて適当にどうぞ。
----
#include <stdio.h>
#include <unistd.h>
#ifndef UINT_MAX
#define UINT_MAX 4294967296
#endif /* UINT_MAX */
#define FREQ 1130000000 /* MY PC has Pentiam III - 1.13 GHz */
#define TICK_PER_CLOCK (double)1.0/FREQ
typedef struct{unsigned int u,l;} tick_t;
static void get_tick(tick_t *tick)
{
asm(
".word 0x310f;"
"movl %%eax,%0;"
"movl %%edx,%1;"
:"=g"(tick->l),"=g"(tick->u)
:
:"eax","edx");
}
int main(void)
{
tick_t c1,c2;
int i;
double sec1,sec2;
for ( i=0; i<10; i++) {
get_tick(&c1);
sleep(i);
get_tick(&c2);
sec2 = (c2.u * UINT_MAX + c2.l) * TICK_PER_CLOCK;
sec1 = (c1.u * UINT_MAX + c1.l) * TICK_PER_CLOCK;
sec2 -= sec1;
printf("%d:%f\n",i,sec2);
}
return 0;
}
----
実行例)
0:0.000022
1:1.016472
2:2.007725
3:3.005020
4:3.994624
5:4.996684
6:6.004263
7:6.990544
8:7.993627
9:8.978648
>> for(i = 0; i < 1000; i++)
>そりゃあ0が表示されるでしょう。今時のマシンで、1000回ループごときで
>計測できるような時間がかかるとは思えません。
規格でCLOCK_PER_SECって常に1000000に決まっているんでしたっけ?
と、すると、clock()はμ秒単位でしか計測できないですね。
単純な足し算なんてCPUの1 clock程度でできるんだろうし、
1000回くらいの空のループだと1 GHzのCPUなら
きっと1μ秒くらいで、終了しちゃうんでしょうねぇ。
精度は1μ秒より大きいかもしれませんから、
その場合には0になる確率は非常に高いですねぇ。
何度も試せば たまーに1になるかも。
# 私の環境(Solaris)では、精度は10m秒の様です。
# 100回に1度くらい10000という表示をしてくれます。:-)
ANSI規格の関数ではないので環境によっては使えませんが、
比較的多くの環境で利用可能な時間測定用の関数にclock_gettime()というのが
あります。
# POSIX準拠の関数(のはず)だからUNIXなら間違いなく使えると思うのですが、
# Windowsだと...使えないのかなぁ?
systemによってはclock()と同じ精度しかもたないかもしれませんが、
多くのsystemで、かなり細かく時間を計測してくれる可能性があります。
struct timespec tm;
clock_gettime( CLOCK_REALTIME, &tm);
printf("%ld.%09ld\n",tm.tv_sec,tm.tv_nsec);
って感じで使えます。
私の環境では、1000回のループでもちゃんと時間を計測してくれました。
他にも お使いのsystem専用の高精度な時間測定用関数があるかもしれません。
ただ、
>また、コンパイラによっては、空のループは最適化して何もしないようにしてしまう
>ことがあります。ベンチマークしたいなら、何か意味のあるコードを入れておくべきでしょう。
この様な最適化がなされたらお手上げですが...(^^;)
> はじめまして、梅吉と申します。
はじめまして。
> time.hをインクルードして、clock()を使えばいいのかな・・・と思って
> 以下のようにプログラムを書いてみたのですが、全然動きません。0とか出てきます。
まず、「cloak_t」とありますが、これは「clock_t」ですよね?
これ以外の箇所は、全くこれと同じソースで試したと思って良いですか?
# こういうところで無駄なやりとりを防ぐため、ソースはできるだけ
# そのままcut&pasteしてください。
もし、これをこのまま実行したということであれば、
> for(i = 0; i < 1000; i++)
そりゃあ0が表示されるでしょう。今時のマシンで、1000回ループごときで
計測できるような時間がかかるとは思えません。
私のところでループ回数を100000000回に変えてみたところ、
「1470000」と表示されました。1.5秒くらいですね。
うちのへっぽこマシン(Celeron333MHz)でこの成績です。
また、コンパイラによっては、空のループは最適化して何もしないようにしてしまう
ことがあります。ベンチマークしたいなら、何か意味のあるコードを入れておくべきでしょう。
> gccに -Wallをつけてコンパイルすると、"In function `main'"とでるので、
> clock()の使い方が間違ってると思うのですが、どう直せばよいのでしょうか?
エラーメッセージは他には出ませんでしたか?
"In function `main'"は、エラーがmain関数の中で起きたことを示しています。
今回のプログラムはmain関数しかありませんから、これでは情報としてほとんど無意味です。
うちで実験したところ、こう表示されました。
gcc -o clocktest -Wall clock.c
clock.c: In function `main':
clock.c:16: warning: int format, clock_t arg (arg 2)
16行目の内容はこうです。
printf("%d\n", hoge2 - hoge);
エラーメッセージを見て、何が原因だと思いますか?
はじめまして、梅吉と申します。
「C言語 体当たり学習」読ませていただきました。
おかげで、単位も「優」がとれて平和な日々を送っております。(ぇ
早速質問なのですが、
「C言語 体当たり学習」のp188でソートにかかった時間を計ってますよね?
これってどのようにすればできるのでしょうか?
time.hをインクルードして、clock()を使えばいいのかな・・・と思って
以下のようにプログラムを書いてみたのですが、全然動きません。0とか出てきます。
#include<stdio.h>
#include<time.h>
int main(void)
{
clock_t hoge;
cloak_t hoge2;
int i;
hoge = clock();
for(i = 0; i < 1000; i++)
;
hoge2 = clock();
printf("%d\n",hoge2 - hoge);
return 0;
}
gccに -Wallをつけてコンパイルすると、"In function `main'"とでるので、
clock()の使い方が間違ってると思うのですが、どう直せばよいのでしょうか?
> とりあえず、裏掲示板を作ってテストはしましたが、うまくいったかどうか
> わからないのでこの投稿はテストも兼ねています。
うちの環境では成功したようです。
不具合等あるようでしたらここに書いてください。
この掲示板、一度投稿した際のハンドル名やメールアドレスをcookieで保持して
次の投稿の際に入力しなくてよいようにするという機能がなかったのですが、
修正して動くようにしました。
サンプルにしたHTMLにもともとそういう機能がなかったのかと思いましたが、
どうやら私が勝手に削ってしまっていたようです (^^;
とりあえず、裏掲示板を作ってテストはしましたが、うまくいったかどうか
わからないのでこの投稿はテストも兼ねています。
こんにちは。
勝手に要点を纏めると・・・
・C言語でネットワークプログラミングを行いたい。
でも実は、どんなアプリを作成したいか形が見えていない。
・Windowsを持っているが、別に作成プラットフォームは問わない。
UNIXでのプログラミングにも興味がある。
・どのようなプロトコルがあるのかなどの知識はまだない。
ということですよね。
以前からのmonoさんの書き込みを見ていると、
これもやはりC言語の習得の一環だと思うのですが、
「まずは簡単なデータのやり取りをしてみたい」ってレベルであれば、
プラットフォームを変えずにWinSockでやってみるのが良いかと思います。
UNIXへ行けばUNIXの知識が先に必要になって、
C言語の習得がもたつく可能性もありますし、
何より、VC++とは違って起動すれば勝手にプロジェクトを作って、
オブジェクトの管理もしてくれる、というわけでもないです。
# mkmfみたいなものを使っても良いですが・・・
それから、いい本を「ああ、いいな」と思うのは
実際に悪い本に出会って実感するものなので、
できれば「自分の目で選んだもの」を1冊買ってみて、
それが読み終わったら別の本を立ち読みすると良いですよ。
そうすると
「あ、最初の本はこれ載ってなかったな。あれはどうかな?」とか
「じゃぁ、こっちの本はどうだろう?」
ていう風に絶対なりますので。
すぐにお金が捻出できなければ図書館で借りるのも手です。
TCP/IPのものなら、Webと一緒でたくさんあります。
なんか取りとめもない感じになりましたがそんな感じで(←どんな感じだ?)
> もっと調べて出直してきます。
せっかく質問しても、毎度最後には謝罪して出直し、ではお互い気分が
よくないでしょう。
掲示板やMLに質問をポストする場合の一般的な注意事項として、
以下のようなものがあります。
(1)適切な件名をつけること
(2)誰かの発言に返事をする際には適切に引用すること。
不要な引用部分は削り、相手の発言のどの部分に対する返事なのかが
わかるようにすること。
(3)開発環境を明記すること。
(1)について:
適切な件名が付けられないようなときは、往々にして「何がわからないのか」を
本人がわかっていないことが多いものです。適切な件名を付けようとすることで、
自分の疑問点を明確にすることが出来ます。
(2)について:
ポエムの感想書いてるんじゃあるまいし、技術的なレスに対して返事をするのなら、
相手の発言のどこかがわからないのなら、どこがわからないのかわかるように、
どこかに反論または賛同するのなら、どこに反論/賛同するのかがわかるように、
部分的な引用に対してレスを付けるべきでしょう。そうすることで、
嫌でも相手の発言をよく読むことになります。
相手の発言を全文引用するようなレスを見るたびに、相手の発言をろくすっぽ
読んでいないな、と思います。
(3)について:
Cの文法に関する質問なら不要でしょうが、「動きが変だ」という場合には
必要なケースがあります。判断に迷うようなら付けておきましょう。
「ネットワークプログラミングをしたい」といった質問なら、UNIXかWindowsか
Macintoshか程度の区別は必須です。
関連するJavaHouseの記事です。
http://java-house.jp/ml/archive/j-h-b/007032.html#body
http://java-house.jp/ml/archive/j-h-b/029442.html#body
# あらためて、JavaHouseって「初心者に優しい」メーリングリストだったんだなあ、
# と思う今日この頃。
> たしかに。元質問者がTCP/IPにこだわりすぎているように見受けましたので
> 注意といえば、おこがましいのですけど指摘したわけです。
はい、了解しています。前回のレスは雑談モードでした。
> いずれにしても
> ネットワークのプログラムをすると、いずれOSI7階層を知ることになり、
> 実際にプログラムを始めると、プログラムは主に上位階層の話になってしまう
> ことがイヤがおうでもわかってしまうでしょうけども。
これも同意します。低位のレイヤを隠すようにライブラリが作ってある
わけですからね。UNIXならinetd.confを使えばシェルスクリプトでも
httpdが書けちゃったりして。
昔、「インターネットを256倍使うための本」で読んでちょっと感動しました。
http://www.ascii.co.jp/pb/book1/announce/inet256/Source/shttpd
> > TCP/IP自体はプロトコルだから、これがわかったからと言って
> > ネットワークのプログラムができるわけではないですよ。
>
> 確かにIPのパケットの構造なんかをバイト単位で知っててもあまり
> 意味はないでしょうけど、階層モデルを知らないとネットワークって
> 結局理解できないですよね。
>
> まっとうなネットワークの教科書なら、プログラマ向けのものであれ
> ネットワーク管理者向けのものであれ、OSI階層モデルの図は載っていると
> 思いますし、そこでTCP/IPの名前は出てくるはずです。
もっと調べて出直してきます。
> (ぱ) さん
> >確かにIPのパケットの構造なんかをバイト単位で知っててもあまり
> >意味はないでしょうけど、階層モデルを知らないとネットワークって
> >結局理解できないですよね。
>
> たしかに。元質問者がTCP/IPにこだわりすぎているように見受けましたので
> 注意といえば、おこがましいのですけど指摘したわけです。いずれにしても
> ネットワークのプログラムをすると、いずれOSI7階層を知ることになり、
> 実際にプログラムを始めると、プログラムは主に上位階層の話になってしまう
> ことがイヤがおうでもわかってしまうでしょうけども。
僕がTCP/IPにこだわっているつもりは無いんですが。
ネットワークプログラミングのHPを見るとその言葉が出てくるので
ネットワークプログラミングをやるには必修のものだと
思っていたのでそういうことになってしまいました。
そこまで深く考えるようなことではないようなことだったんですね。
> momoさん
> >ネットワークプログラミングができるようになるためには何が必要ですか?
>
> かなり漠然とした質問ですね。それよりも私が紹介したURLとかを調べて
> みましたか?もしやっていたら、もっと具体的な質問が出ると思うのですが。
> Googleで検索するだけでも、かなりのことがわかるはずですが。
> 調べてみて、やっぱりわからなかったのなら申し訳ないです。
> 説明するにはそれなりの分量が必要なので申し訳ないですが、あとは
> 書籍ででも調べてください。特定のプラットホームにこだわらないなら
すいませんでした。もっと調べてみます。教えていただいた本も
参考にさせていただきます。
あまり書き込みを分散させたなくないのでまとめて返答です。
(ぱ) さん
>確かにIPのパケットの構造なんかをバイト単位で知っててもあまり
>意味はないでしょうけど、階層モデルを知らないとネットワークって
>結局理解できないですよね。
たしかに。元質問者がTCP/IPにこだわりすぎているように見受けましたので
注意といえば、おこがましいのですけど指摘したわけです。いずれにしても
ネットワークのプログラムをすると、いずれOSI7階層を知ることになり、
実際にプログラムを始めると、プログラムは主に上位階層の話になってしまう
ことがイヤがおうでもわかってしまうでしょうけども。
momoさん
>ネットワークプログラミングができるようになるためには何が必要ですか?
かなり漠然とした質問ですね。それよりも私が紹介したURLとかを調べて
みましたか?もしやっていたら、もっと具体的な質問が出ると思うのですが。
Googleで検索するだけでも、かなりのことがわかるはずですが。
調べてみて、やっぱりわからなかったのなら申し訳ないです。
説明するにはそれなりの分量が必要なので申し訳ないですが、あとは
書籍ででも調べてください。特定のプラットホームにこだわらないなら
Linuxソケットプログラミング
http://www.ne.jp/asahi/yokohama/juk/LSP/
がお勧めです。Linuxと書いてますが、たいていのSocketライブラリに
応用が聞きますし(嘘ではありません。Mac OS Xでも使えましたから。)
Javaでのソケットプログラミングまで書いていますし
他にもためになる話が書いているので個人的には重宝してます。
> TCP/IP自体はプロトコルだから、これがわかったからと言って
> ネットワークのプログラムができるわけではないですよ。
確かにIPのパケットの構造なんかをバイト単位で知っててもあまり
意味はないでしょうけど、階層モデルを知らないとネットワークって
結局理解できないですよね。
まっとうなネットワークの教科書なら、プログラマ向けのものであれ
ネットワーク管理者向けのものであれ、OSI階層モデルの図は載っていると
思いますし、そこでTCP/IPの名前は出てくるはずです。
> でも個人的にはJavaで
> ネットワークプログラムをしたときが最も簡単だったという印象がありますなー。
これは同意です。
> TCP/IP自体はプロトコルだから、これがわかったからと言って
> ネットワークのプログラムができるわけではないですよ。
> USBやSCSIやFiweWireがわかったからと言ってスキャナーや
> ハードディスクのプログラムが書けるわけでないのと同様。
> 電話のかけ方を知っている人が電話のプログラムを知っているわけでなし。
TCP/IP = ネットワークプログラミングではなかったのですか?
すいません、そこら辺は無知でした。ではネットワークプログラミングができるように
なるためには何が必要ですか?
> それよりも自分が得意とするプラットホームで、ネットワークのプログラムを
> どう取り扱っているかを調べるほうが先決でしょう。Windowsが得意なら、
> WinSock2なら、ほぼUnixのsocketと似たようなプログラムになるから、
> わざわざ苦手なUnixプログラムをする必然性があるのか私も疑問です。
> だいたいsocketライブラリという範疇は、ほとんどのプラットホームでは
> Unixのsocketを参考にしてますんで、だいたい同じようなプログラムに
> なります。(というか違うように実装するほうが難しいと思う。)
ここの「どう取り扱っているか」という意味がよくわからないので教えてください。
> Windowsは使うのは得意だけどプログラムは知らないだったら話は別ですけど。
ここのプログラムはwindowsで動作できるプログラムということですか?
> その場合はUnixでも条件は同じになるから。でも個人的にはJavaで
> ネットワークプログラムをしたときが最も簡単だったという印象がありますなー。
Cのネットワークプログラミングよりjavaのほうが簡単なんですか、
どちらをやろうか迷いますね。でもこれからUNIX(Linux)をはじめようと考えているんで
まあUNIXでもう少しCにかじりつきたいと思っています。
それでネットワークプログラミングの勉強も一緒にということです。
>まずはTCP/IPを覚えることからはじめたほうがいいのでしょうか?
TCP/IP自体はプロトコルだから、これがわかったからと言って
ネットワークのプログラムができるわけではないですよ。
USBやSCSIやFiweWireがわかったからと言ってスキャナーや
ハードディスクのプログラムが書けるわけでないのと同様。
電話のかけ方を知っている人が電話のプログラムを知っているわけでなし。
それよりも自分が得意とするプラットホームで、ネットワークのプログラムを
どう取り扱っているかを調べるほうが先決でしょう。Windowsが得意なら、
WinSock2なら、ほぼUnixのsocketと似たようなプログラムになるから、
わざわざ苦手なUnixプログラムをする必然性があるのか私も疑問です。
だいたいsocketライブラリという範疇は、ほとんどのプラットホームでは
Unixのsocketを参考にしてますんで、だいたい同じようなプログラムに
なります。(というか違うように実装するほうが難しいと思う。)
Windowsは使うのは得意だけどプログラムは知らないだったら話は別ですけど。
その場合はUnixでも条件は同じになるから。でも個人的にはJavaで
ネットワークプログラムをしたときが最も簡単だったという印象がありますなー。
> ・「情報が多いからやりやすい」というメリットが、UNIXを始めるのに
> かかる労力というデメリットを上回るかどうか、検討しましたか?
> 現状の開発環境がなんだかわかりませんが、VC++を持っているなら
> Winsockの情報はWeb上にもあるようですし、cygwinならUNIX互換の
> socketが使えるようですし(私はどっちもやったことはないですが)。
> ・OSじゃなくて言語を乗り換えるという選択肢もありますが、それは
> 検討しましたか? JavaやPerlでもネットワークは使えるし、情報も
> 結構あります。
> ・そもそも何をしたいのかわかりませんが、その「やりたいこと」は、
> UNIXでも問題なくできることなのでしょうか? たとえば「ネットワーク
> 対戦ゲームを作って友達に自慢したい」と思っているのなら、
> 友達もUNIXを持ってない限りあんまり自慢できないでしょう。
>
> それに、ひとことで「ネットワークプログラミング」と言われても…
> Windowsなら、DCOMやら.NETもあるわけですし。
>
> なんだか、
>
> 「ネットワークプログラミング」というからsocketライブラリで
> TCP/IPを使いたいのかなあ、と思っていたら、実は作りたいのはCGIだった。
>
> なんて落ちがありそうで怖いです。
>
僕が考えているのはネットワークを使ったプログラムを書く、ということで
(これは自分の読んでいた本にネットワークプログラミングのことが書いてあったので
もっとよく知りたいというふうに思ったので)でもTCP/IPなど
いろいろ出てきて少し混乱してしまいました。もちろんTCP/IPはやったことがないです。
Linuxは前々からやりたいと思っていたので。一つ前の投稿のようなことを書きました。
まずはTCP/IPを覚えることからはじめたほうがいいのでしょうか?
> 自分でも色々調べてみたんですが。
> やっぱりUNIXでやるのが多いようですね。
> 自分もUNIXをはじめようと思います。
あのー、確かにTCP/IPの起源はUNIXですから、Webでプログラミングの情報を探せば
UNIXが多いし、情報が多い方がやりやすいのは確かでしょうが、
・「情報が多いからやりやすい」というメリットが、UNIXを始めるのに
かかる労力というデメリットを上回るかどうか、検討しましたか?
現状の開発環境がなんだかわかりませんが、VC++を持っているなら
Winsockの情報はWeb上にもあるようですし、cygwinならUNIX互換の
socketが使えるようですし(私はどっちもやったことはないですが)。
・OSじゃなくて言語を乗り換えるという選択肢もありますが、それは
検討しましたか? JavaやPerlでもネットワークは使えるし、情報も
結構あります。
・そもそも何をしたいのかわかりませんが、その「やりたいこと」は、
UNIXでも問題なくできることなのでしょうか? たとえば「ネットワーク
対戦ゲームを作って友達に自慢したい」と思っているのなら、
友達もUNIXを持ってない限りあんまり自慢できないでしょう。
それに、ひとことで「ネットワークプログラミング」と言われても…
Windowsなら、DCOMやら.NETもあるわけですし。
なんだか、
「ネットワークプログラミング」というからsocketライブラリで
TCP/IPを使いたいのかなあ、と思っていたら、実は作りたいのはCGIだった。
なんて落ちがありそうで怖いです。
自分でも色々調べてみたんですが。
やっぱりUNIXでやるのが多いようですね。
自分もUNIXをはじめようと思います。
そこでRed Hat Linuxをやろうと思っているんですが。
いいでしょうか?
横からすいません。
“TCP/IP”は検索エンジンで調べるといやんなるぐらいヒットします。
Windowsでネットワークとなると、WinSockを使ったプログラムですね。
http://www.k-jee.com/Research/winsock.htm
とか参考になるでしょうか。
本となると、
WinSock2.0プログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4797306882/250-8833657-7962663
あたりが定評が高いようです。ただしそれなりに歯ごたえがありますが。
> それはそうと、「C言語のネットワークプログラミング」とのことですが、
> TCP/IPの話でよかったですか? OSはUNIXでよかったですか?
>
すいません、TCP/IPとはなんですか?
あとネットワークプログラミングはUNIXでなければいけないのですか?
僕はwindowsを使っているのですが・・・。
> 皆様のお勧めの
> 「C言語のネットワークプログラミング」について書いてある
> 本を教えてください。これから自分も勉強しようと思いまして。
私に関して言えば、定番の「UNIXネットワークプログラミング」で
勉強しました。ただ、とっつきのいい本ではないですし、値段は高いし、
人を殴り殺せそうなぐらい重い本でもありますので、いきなり買うのは
お勧めできません。
まずはWeb上の入門ページを読んで、サンプルコードのひとつも
動かしてからの方が、本を買うにも「目鼻が利く」ようになるのでは
ないでしょうか。
それはそうと、「C言語のネットワークプログラミング」とのことですが、
TCP/IPの話でよかったですか? OSはUNIXでよかったですか?
また投稿させていただきます。
皆様のお勧めの
「C言語のネットワークプログラミング」について書いてある
本を教えてください。これから自分も勉強しようと思いまして。
新たな本を買おうと思っています。
ぜひ、その参考にさせていただきたいと思っています。
この掲示版も一応軌道に乗ったと思うので、広告を外しました。
決済にはSmartPitを用いました。その話はまた今度。
従来の掲示版は「裏掲示版」として存続させようと思います。雑談馴れ合い歓迎です。
なお、表の掲示版も雑談はOKです。だったらわざわざ分ける必要もないんじゃないか、
とも思うんですが、Nifty側の掲示版が余ったことですし、より気楽に書き込んで
いただける場にしようと思いました。
どちらの板も、閑散としてしまうと寂しいですので、皆様よろしくお願いいたしますです(_o_)