タグ

CとUNIXに関するakaneharaのブックマーク (4)

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

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

  • C言語execメモ(Hishidama's C "exec" Memo)

    S-JIS[2012-11-17] exec系関数 execは、C言語で別プログラムを実行(execute)する関数。 概要 exec系の関数は、別プログラムを実行する。 「exec」という関数そのものは無くて、execl・execv・execvp等のいくつかのバリエーションがある。 exec系関数によって別プログラムを実行すると、制御はそのプログラムへ移行し、自プログラムへは戻ってこない。(execの実行に失敗した場合だけ戻ってくる) 自分の処理を続行したい場合はfork()と組み合わせて使用する。 →forkと組み合わせる例 別プロセスを実行する方法は、execの他にもsystem(シェルの機能を使ってコマンドを実行する)やpopen(パイプで通信可)等がある。 execの種類 execl(exec「L」)は引数が可変長引数になっていて、execv(exec「v」)は引数が配列になって

  • Unix v6 の C コンパイラが面白かった話 - 兼雑記

    Unix v6 の C コンパイラをいじってみようと見てたのですが、これがなかなかすごい物体でした。 読んでて、「いやいくらなんでもこんな作りなわけが…」と思って説明文を探して、 http://plan9.bell-labs.com/7thEdMan/v7vol2b.pdf の「A Tour through the UNIX C Compiler」に説明あるよと教えてもらって読んでみたら、当にそんな作りだった、みたいな。 コンパイラの1段目はプリプロセスして構文木的なものをファイルに吐いて終わりです。2段目は構文木を読みつつコード生成していく。 構文木のノードの種類に対して switch してやること決める…的なものが、データドリブンな方法で書かれてます。データを保存するフォーマットは、 JSON とかではなく、時代が時代ですのでアセンブリです。こういうやつ https://github

    Unix v6 の C コンパイラが面白かった話 - 兼雑記
  • C 言語で echo サーバを作ってみよう (2)

    select によるマルチスレッドサーバ C 言語において select の使い方を説明します。 echo-server-select.c 117: int 118: main(){ 119: fd_set target_fds; 120: fd_set org_target_fds; 121: int sock_optval = 1; 122: int port = 5000; 123: /* リスニングソケットを作成 */ 124: listening_socket = socket(AF_INET, SOCK_STREAM, 0); 125: 126: /* ソケットオプション設定 */ 127: if ( setsockopt(listening_socket, SOL_SOCKET, SO_REUSEADDR, 128: &sock_optval, sizeof(sock_opt

  • 1