|
> それとも、$argvなどで指定しているのがわるいのでしょうか? くさいですね。csh では % echo $user:/dir などはエラーになります。シェル変数の後の : は修飾子(?)だから。 正解は ${user}:/dir。 これ以上は、何を使ってスクリプトを書いているのか(sh? csh?)、 実際はどういうふうに記述しているのか、$argvの中の値は何か、 などを書いていただかないと何とも言えません。 そうそう、この前のシェルのカレントディレクトリですが、 一つ方法がありました。evalを使う方法です。 % cat mycd #!/bin/sh echo 'cd /' % pwd /usr/home/user % eval `mycd` % pwd / % cd /usr/home/user % alias mycd \`\\mycd\` % mycd % pwd / ただしスクリプト中では、cd 以外の出力をしてはいけません (STDERRになら出力できます)。 |
|
> ただしスクリプト中では、cd 以外の出力をしてはいけません 間違い。echo文 自体を出力すればできますね。 #!/bin/sh echo 'echo hoge;' echo 'cd /' |
|
システムコールについて調べているのですが、 OS毎に、システムコールに違いがあります。 SystemV Release4.0(SVR4.0) の 全システムコールの種類を 知りたいのですが、どこかに情報はありませんでしょうか? |
|
こんにちは 今、qpopper2.53というPOP3でメールを受信できるようにする モジュールをインストールしているのですが、 解凍して、./configureをかけた際、 loading cache ./config.cache checking whether make sets ${MAKE}... yes checking for gcc... gcc checking whether the C compiler (gcc ) works... no configure: error: installation or configuration problem: C compiler cannot create executables. というメッセージがでてMakefilesなどのファイルが生成されません。 Cコンパイラがconfigureのプログラムを実行可能にしてくれないらし いのです。 LIBSの設定は"-lsocket -ldl -lnsl"と設定してあります。 ccというのが/usr/abiccs/necbin 内にあったので、 そのパスを指定したのですが、いざ中身をviでみてみたら #!/sbin/sh #ident "@(#) cc.m4,v 1994/01/26 06:37:31 1.3" /usr/abiccs/bin/cc -Kssizeof -Yi,/usr/abiccs/necinclude -YP,/usr/abiccs/neclib:/ usr/abiccs/lib:/usr/lib "$@" -lnec という感じになっていました。 どうもこのようなモジュールやツールなどを解凍、インストールする時 ドキュメント通りにはいきません。 UX/4800特有の設定などをしなければならないのでしょうか。 それから、CC コンパイラはどこかで手に入れられるものなのでしょうか? よろしくお願いします。 |
|
> SystemV Release4.0(SVR4.0) の 全システムコールの種類を > 知りたいのですが、どこかに情報はありませんでしょうか? すいません、知らないです。SVR4と言ってもいろいろありますから、 全部調べるとなると大変でしょうね。 > ccというのが/usr/abiccs/necbin 内にあったので、 あぁ、ずっと HP-UX かと思ってたら、NECのUXだったのね。 > そのパスを指定したのですが、いざ中身をviでみてみたら スクリプトでもバイナリでも、要は動けばいいんです。 で、動いたんですか? ちなみに /usr/abiccs/necbin/cc は ANSI C準拠コンパイラだと思います。 > それから、CC コンパイラはどこかで手に入れられるものなのでしょうか? そのシステムにgccは入ってませんか? ないようなら ftp://ftp.eos.hokudai.ac.jp/pub/gnu/gcc/ から お好きなバージョンをどうぞ。2.8.1あたりが安定してるんでしたっけ? ユニ男さんへ。僕が UX 知ってるなら教えてあげられるけど、 残念ながら使ったことがないし、これまでいくつか回答しましたが どうも的外れな答えしか書いてないような気がします。近くにUNIXを 知ってる方がいたら その人に質問するか、あるいは fj.unix などで 質問する方がいいと思います。 |
|
いつもお世話になってます。 >あぁ、ずっと HP-UX かと思ってたら、NECのUXだったのね。 UX/4800なんです。周りにあまり聞ける人がいなくて・・・ >スクリプトでもバイナリでも、要は動けばいいんです。 >で、動いたんですか? ちなみに /usr/abiccs/necbin/cc は >ANSI C準拠コンパイラだと思います。 動きませんでした。 >そのシステムにgccは入ってませんか? ないようなら > ftp://ftp.eos.hokudai.ac.jp/pub/gnu/gcc/ >から お好きなバージョンをどうぞ。2.8.1あたりが安定してるんでし >たっけ? GCC入っています。PATH指定しても下のメッセージが出てしまいます. 稼動していないみたいなんです。 >どうも的外れな答えしか書いてないような気がします。近くにUNIXを >知ってる方がいたら その人に質問するか、あるいは fj.unix などで >質問する方がいいと思います。 そんなことありません。とても参考になります。こちらこそあやふやな質問ばかりで迷惑をかけているのではないか常日頃思っています。 >近くにUNIXを知ってる方がいたら その人に質問するか、あるいは >fj.unix などで質問する方がいいと思います。 fj.unix ですね。探していってみたいと思います. ちなみにSOCKS5の件ですが、 setenv LIBS "-lsoket -ldl -lnsl" として./configure→makeで解決しました。 |
|
>すいません、知らないです。SVR4と言ってもいろいろありますから、 >全部調べるとなると大変でしょうね。 米国Sun社のサイトにありました。ご参考まで。 http://www.sun.com/smcc/solaris-migration/docs/transition-guide_2.5/apx_b.html |
|
CGIのファイルをサーバにおいて パーミッションを変更しようとすると、 下のように出て変更できません。 502 SITE command not implemented. どなたか助言をお願いします。 |
|
はじめまして、かんじゃと申します。 こちらのホームページで 「UNIXネットワークベストプログラミング入門」技術評論社 が紹介されています。 じつは小生もこの本のプログラムを 実行してみたのですが seg fault のメッセージが表示され てうまく実行できません。 >文字列リテラルを書き換えており、 FreeBSDで >実行するとコアダンプしてしまった(どちらもC >言語中級者なら 自分で問題箇所を修正できるレベル)。 というコメントが書かれておりましたが、具体的にはどういった ことが問題なのでしょう? よろしければご教示、お願いします。 |
|
はじめまして、かんじゃと申します。 こちらのホームページで 「UNIXネットワークベストプログラミング入門」技術評論社 が紹介されています。 じつは小生もこの本のプログラムを 実行してみたのですが seg fault のメッセージが表示され てうまく実行できません。 >文字列リテラルを書き換えており、 FreeBSDで >実行するとコアダンプしてしまった(どちらもC >言語中級者なら 自分で問題箇所を修正できるレベル)。 というコメントが書かれておりましたが、具体的にはどういった ことが問題なのでしょう? よろしければご教示、お願いします。 |
|
メールアドレスの記入ミスで同じ内容のものを2度書き込んで しまいました。 申し訳ありません。 |
|
> 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」に詳しく書いてあります。 |
|
>> 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で共有される領域は何だろう? |