68user's page 掲示板

Prev< No. 415〜423> Next  [最新発言に戻る] [過去ログ一覧]
No. 415 # 鳶寺 1999/08/05 (木) 13:10
>すいません、知らないです。SVR4と言ってもいろいろありますから、
>全部調べるとなると大変でしょうね。
米国Sun社のサイトにありました。ご参考まで。
http://www.sun.com/smcc/solaris-migration/docs/transition-guide_2.5/apx_b.html

No. 416 # 初心者 1999/08/11 (水) 23:35
CGIのファイルをサーバにおいて
パーミッションを変更しようとすると、
下のように出て変更できません。

502 SITE command not implemented.

どなたか助言をお願いします。

No. 417 # がんじゃ@C修行中 1999/08/13 (金) 16:25
はじめまして、かんじゃと申します。
こちらのホームページで

「UNIXネットワークベストプログラミング入門」技術評論社
  
が紹介されています。 じつは小生もこの本のプログラムを
実行してみたのですが seg fault のメッセージが表示され
てうまく実行できません。

>文字列リテラルを書き換えており、 FreeBSDで
>実行するとコアダンプしてしまった(どちらもC
>言語中級者なら 自分で問題箇所を修正できるレベル)。

というコメントが書かれておりましたが、具体的にはどういった
ことが問題なのでしょう?

よろしければご教示、お願いします。

No. 418 # がんじゃ@C修行中 [E-mail] 1999/08/13 (金) 16:25
はじめまして、かんじゃと申します。
こちらのホームページで

「UNIXネットワークベストプログラミング入門」技術評論社
  
が紹介されています。 じつは小生もこの本のプログラムを
実行してみたのですが seg fault のメッセージが表示され
てうまく実行できません。

>文字列リテラルを書き換えており、 FreeBSDで
>実行するとコアダンプしてしまった(どちらもC
>言語中級者なら 自分で問題箇所を修正できるレベル)。

というコメントが書かれておりましたが、具体的にはどういった
ことが問題なのでしょう?

よろしければご教示、お願いします。

No. 419 # かんじゃ@C修行中 [E-mail] 1999/08/13 (金) 16:30
メールアドレスの記入ミスで同じ内容のものを2度書き込んで
しまいました。
申し訳ありません。

No. 420 # 68user 1999/08/13 (金) 19:55
> 502 SITE command not implemented.
FTPでのパーミッションの変更は、SITEコマンドを使用するんですが、
相手側のFTPサーバにはSITEコマンドが実装されていないので、
できない、ってことです。telnetでログインしてchmodするか、
管理者に頼んでまともなFTPサーバに置き換えてもらうしかないです。

> seg fault のメッセージが表示されてうまく実行できません。
現在、手元には その本もUNIX環境もないので、確かなことは
言えませんが、どこかで char *buf="abc" などと初期化して
いる部分があると思います。で、それを buf[0]='X' などと
変更していますが、そこで落ちるはずです。"abc" は文字列
リテラルなので変更することはできないから(変更できる
環境もありますが)。なので、char buf[]="abc" などと書き
換えれば動いたと思います。

*buf="abc" と buf[]="abc" の違いについては、ネット上に
落ちてる「C言語FAQ」に詳しく書いてあります。

No. 421 # かんじゃ@C修行中 [E-mail] 1999/08/16 (月) 10:35
>> seg fault のメッセージが表示されてうまく実行できません。
> 現在、手元には その本もUNIX環境もないので、確かなことは
> 言えませんが、どこかで char *buf="abc" などと初期化して
> いる部分があると思います。・・・以下省略

さっそくのご教示ありがとうございます。
以上参考にさせていただき、さらに修行していきます。

No. 422 # mm 1999/08/20 (金) 22:54
文字列リテラルは、昔のCでは、結構普通に書き換えたりしてたみたいです。
unixの古いccのライブラリでも、この書き換えをやっているという話を聞いたことがあります。
(聞いたのは、一時ファイルの名前を作るライブラリ関数だったような…)
ANSI C以前は、自動変数の場合には、配列の初期化ができなかったために、
便宜的に利用してたのかもしれません。それとも、スタックに文字列を確保しても、
これを関数の呼び出し元に返すことはできないので、mallocを使う代わりに
静的領域を利用してたのかな…にしても毎回同じ領域が使用されるので、
static にすれば済むことって気も…?

いずれにしても、ROM化やコンパイラが同じ文字列リテラルを共用させるために、
ANSI C以降は、文字列リテラルの変更は未定義とされたようです。

No. 423 # 68user 1999/08/27 (金) 06:31
> いずれにしても、ROM化やコンパイラが同じ文字列リテラルを共用させるために、
に加えて、複数プロセスでデータセグメントを共有させるため、
例えば ls を並行して2個実行した場合、スタックとヒープは
2個用意されるが、データセグメントは1個しか用意されない、
と思ってるんですが、全然違うかも。
# アセンブラやってないんで、ここらへん いまいち感覚的に理解できない。

Prev< No. 415〜423> Next  [最新発言に戻る] [過去ログ一覧]