タグ

linuxとCに関するnullpobugのブックマーク (5)

  • [C言語] pipeを使ってプロセス間通信してみる - Qiita

    最近はやたらとCが楽しいです。 (関係ないけど「LINUXシステムプログラミング」っていうがとても面白かったです。OSがなにをしてくれているかがよく分かりました) 色々やってみたいことがあるけど、まずはプロセス間通信としてpipeを使ったやつをごにょごにょしてみました。 ちなみにこちらの記事を参考にさせていただきました。 やったこと とりあえずpipeを作って、もうひとつ作ったプログラムと通信する、というごくシンプルなもの。 でも標準入力とか標準出力とかを再設定したり、色々やりたいことに近づけた感じ。 標準入力から読み込んで、標準出力に書き出すだけの応答サンプル pipeの前に、まずは応答するだけのサンプルを作る。以下の感じ。 #include <stdio.h> #include <unistd.h> int main() { const int BUF_LEN = 255; char

    [C言語] pipeを使ってプロセス間通信してみる - Qiita
  • Embarcadero Blogs - Developer Tools - IDERA Community

  • Programming UNIX Sockets in C - Frequently Asked Questions: クライアントとサーバ(TCP/SOCK_STREAM)両方に関する質問

    Previous Next Table of Contents 2. クライアントとサーバ(TCP/SOCK_STREAM)両方に関する質問 2.1 相手側のソケットが閉じられたことをどうやって知ることができますか? Andrew Gierth 氏 ( andrew@erlenstar.demon.co.uk) より: 私の知る限り… 相手側が (SO_LINGER を使ったややこしいことをしないで) close() するか終了したとすると、こちらの read() の呼び 出しは 0 を返すはずです。同じ場合で、write() 呼び出しで何が 起こるかは、もうちょっとわかりづらいです。直後の呼び出し時ではな く、その次の呼び出し時にEPIPE が返るでしょう。 もし相手が再起動するか l_onoff = 1, l_linger = 0 を設定して から閉じたとすると、read() からは(

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

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

  • hello worldなELFバイナリを出力するCのプログラム(の一番単純な奴) - memologue

    こちらの記事(Binary HacksのHack #25の軽い補足)は、「インラインアセンブラをちょっとだけ使って、gccに小さなhello worldバイナリを出力させる」というお話でした。一方、小さいHello Worldが欲しかったら、gccにELF実行バイナリを出力させるのではなく、「自力でELFを吐くCのコードを書いてしまう」手もあります。ご利用のCPUのアセンブリ言語がわかるのでしたら、こっちの方法でHello Worldするのも悪くないですね。こちらの方法でしたら、「急にbrainf*ckのコンパイラが書きたくなった*1」などの非常によくあるシチュエーションにも応用が効きますしー。 ELF直書きって、なんかすごく難しいように思われていると思うんですが(いや、DSO吐いたりするのは実際面倒ですが)、hello worldくらいだったらなんてことないです。次の4つの処理を順に行え

    hello worldなELFバイナリを出力するCのプログラム(の一番単純な奴) - memologue
  • 1