タグ

ブックマーク / www.ncad.co.jp/~komata (3)

  • コンピューター:C言語講座:fork,exec,pipeについて

    コンピューター:C言語講座:fork,exec,pipeについて このテーマはどちらかというとUNIX系の話題になってしまうのですが、PC系ではDOSの時代にはマルチタスクができませんでしたので、平行には走れませんでしたが、C言語の処理系独自の関数がたくさんありました。WindowsになってからはUNIX系と似てきましたが、まだ少し違うようです。 自分で作成したプログラムから他のコマンドを実行したい、ということは良くあることだと思います。例えば、ディレクトリーの中身を簡単に得たい場合などはUNIXではlsコマンドを実行させて、結果をもらうのが簡単に思い付くと思います。とくにUNIXのコマンドはそのように組み合わせて使いやすくできていて、必要な情報だけを明確に返答するコマンドがほとんどです(その分、初心者が自分でコマンドを使う時に不親切なのですが)。 system() 大抵の人が上記のような

  • コンピューター:C言語講座:共有ライブラリについて

    コンピューター:C言語講座:共有ライブラリについて 概要 今回はC言語講座の読者の方からの提案で、共有ライブラリを取り上げます。 共有ライブラリは、静的なライブラリが実行形式に合体されるかたちでリンクされるのと違い、実行時に動的にリンクされるものという定義で、しかも他のプロセスと共有するかたちで実行時にリンクされて使われるものです。UNIXでは、プロセス間でファイルを共有するというと、mmap()を思い浮かべますが、まさにこれを使用し、共有ライブラリをマップして動作するものです。 一般のライブラリは、arコマンドによりアーカイブされて、要するにオブジェクトファイルを固めてつくるようなもので、普通は拡張子として「.a」を使用します。共有ライブラリはarコマンドは使用せず、ccコマンドから実行されるldコマンドが作成します。一般的に拡張子として「.so」を使用します。 ccあるいはldコマンド

  • コンピューター:C言語講座:マルチスレッドについて

    コンピューター:C言語講座:マルチスレッドについて マルチスレッドの特徴 一般的なサーバプログラムでは、多数のクライアントからの処理をできるだけリアルタイムに処理するために、何らかの形で並列処理を行うことが多いものです。たとえば、データベースサーバで、ある検索処理に時間がかかっている間ほかのクライアントが接続すらできない、という状態ではサーバとして失格でしょう。 並列処理を実現する方法としては、 ・プログラム自体を並列処理可能に記述する ・プロセスをもともと多数起動しておく ・fork()を使って子プロセスを起動するマルチプロセス処理 ・マルチスレッドを使用する などが考えられます。プログラム自体をリアルタイム性を考慮しながら記述するのはなかなか大変で、しかもソースが複雑になりメンテナンス性も問題が多くなりがちです。プロセスをもともと多数起動するのは簡単ですが、クライアントがどのプロセスに

  • 1