|
>> seg fault のメッセージが表示されてうまく実行できません。 > 現在、手元には その本もUNIX環境もないので、確かなことは > 言えませんが、どこかで char *buf="abc" などと初期化して > いる部分があると思います。・・・以下省略 さっそくのご教示ありがとうございます。 以上参考にさせていただき、さらに修行していきます。 |
|
文字列リテラルは、昔のCでは、結構普通に書き換えたりしてたみたいです。 unixの古いccのライブラリでも、この書き換えをやっているという話を聞いたことがあります。 (聞いたのは、一時ファイルの名前を作るライブラリ関数だったような…) ANSI C以前は、自動変数の場合には、配列の初期化ができなかったために、 便宜的に利用してたのかもしれません。それとも、スタックに文字列を確保しても、 これを関数の呼び出し元に返すことはできないので、mallocを使う代わりに 静的領域を利用してたのかな…にしても毎回同じ領域が使用されるので、 static にすれば済むことって気も…? いずれにしても、ROM化やコンパイラが同じ文字列リテラルを共用させるために、 ANSI C以降は、文字列リテラルの変更は未定義とされたようです。 |
|
> いずれにしても、ROM化やコンパイラが同じ文字列リテラルを共用させるために、 に加えて、複数プロセスでデータセグメントを共有させるため、 例えば ls を並行して2個実行した場合、スタックとヒープは 2個用意されるが、データセグメントは1個しか用意されない、 と思ってるんですが、全然違うかも。 # アセンブラやってないんで、ここらへん いまいち感覚的に理解できない。 |
|
>に加えて、複数プロセスでデータセグメントを共有させるため、 DOSが長いもので、マルチプロセスのメモリ管理はよく分からないです(苦笑)。 >例えば ls を並行して2個実行した場合、スタックとヒープは >2個用意されるが、データセグメントは1個しか用意されない、 とすると、文字列リテラルだけでなく、静的な変数まで共有される 訳ですよね。 素人考えでは、ホントにそれで良いの?と思っちゃいます… 例えば、コマンドラインオプションで設定されるフラグが グローバル変数だったりすると(あり得ますよね)、前後のlsの オプション指定が異なる場合に、先のlsのフラグまで影響を 受けちゃうおそれがないのかなぁ…? |
|
すいません、よく考えずに適当なことを言ってしまいました(^^; では、2個のlsで共有される領域は何だろう? |
|
>では、2個のlsで共有される領域は何だろう? うーん、unixのメモリ管理はよく知りませんです(苦笑) |
|
ここすごいですねっ!内容がすごく充実しててびっくりしました。<BR> 分からないことがあったら来てみようと思います。<BR> ところで質問です。<BR> ○○○.zip のようなファイルはどうやって解凍すればいいのでしょうか?<BR> gzip -d とか uncompress も試してみたけど、やっぱりだめでした。<BR> UNIXでは解凍できないんですか? |
|
> ここすごいですねっ!内容がすごく充実しててびっくりしました。 ども。ついさっき更新しましたのでよろしく。 http://X68000.startshop.co.jp/~68user/unix/history.html > ○○○.zip のようなファイルはどうやって解凍すればいいのでしょうか? unzip、zipなどのコマンドがあります。unzip -l hoge.zip で一覧表示。 unzip -e hoge.zipで展開です。 |
|
私もここのファン(?)ですが掲示板の投稿は初めてです。早速ですが、UNIXのコマンドについて教えて下さい。 su - username この時のハイフンはどんな意味を持つのでしょうか? |
|
FreeBSD の su ならば - は -l と同じです。 マニュアル: http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=su&dir=jpman-3.2.0%2Fman ソース: http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/su/su.c?rev=1.29.2.2 多分他のUNIXでも同じだとは思うけど、確信はありません。 |
|
ありがとうございます。 ご教示の通り、 - と -l は同じでした。 |