タグ

UnixとCに関するagwのブックマーク (6)

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

    概要 pipe関数でいうパイプとは、バッファーのようなもの。 パイプに対してデータを書き込んでおき、そのパイプからデータを読み込むことが出来る。 このバッファーはOS(カーネル)の機能を使っている。一時ファイルのようなイメージ。 なので、1つのパイプを複数のプロセスで共有すれば、プロセス間通信に使うことが出来る。 例 とりあえずパイプの使い方の確認。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main() { int pipefd[2]; if (pipe(pipefd) < 0) { perror("pipe"); exit(-1); } // パイプへの書き込み char *s = "test"; write(pipefd[1], s, strlen(s)); /

  • C言語のtmpnam()って関数を知った

    なんかのソース(たしかmod_dosdetector)を読んでてCにtmpnam()ってのがあるのを知りました。 なんの関数なんだろうとman tmpnamで調べたらテンポラリーファイル用の関数でした。 プログラムでテンポラリーのファイルを使う場合の名前をよしなに 決定してくれるものらしく、stdio.hで定義されています。 使い方は↓こんな感じにするとs[]にファイル名が入るみたい。 #include <stdio.h> int main() { char s[L_tmpnam+1]; tmpnam(s); printf("%s\n", s); return 0; } ためしに実行してみると、 % gcc ./tmpnam_test.c % ./a.out /var/tmp/tmp.0.GYj9KF こんな感じ。あーなんかこのファイル名どこかで見たことあるような…。 上のコードのL_tm

  • https://jp.techcrunch.com/2011/10/18/20111015what-can-we-learn-from-dennis-ritchie/

    https://jp.techcrunch.com/2011/10/18/20111015what-can-we-learn-from-dennis-ritchie/
  • 低水準ファイル入出力関数を使おう - 68user's page

    低水準ファイル入出力関数 perl でプログラミングするにしても、 基礎知識としてC言語のファイルディスクリプタの概念を知っておくにこしたことはありません。 特に 4引数 select を使うときには、 ファイルディスクリプタの知識があると理解が早いでしょう。 C言語でファイルを扱うときは、一般的に fopen・fread・fwrite・fclose などの ライブラリ関数を使います。これらは stdio.h で宣言されており、 標準入出力ライブラリ (標準入出力関数) と呼ばれます。 ファイルをオープンするときは FILE *fp; fp = fopen("file.dat", "r"); として FILE 構造体を得ます。それに対して fread・fwrite を実行します。 しかし、これら fopen・fread などのライブラリ関数も、 内部では open・read・write・c

  • http://www.kt.rim.or.jp/~kbk/zakkicho/07/zakkicho0702.html

  • 出力先が端末かどうか調べる。 - 技術メモ帳

    g:subtech:id:secondlife さんのところで、 パイプで受け取るとエスケープシーケンスが消去されてるよ!どうやってんだこれ。 というのがあったので、コメント欄に どうやって実現しているのかを書いていた時に、 すでに回答がされているのに気づいて、 俺は何をやっていたんだ、とショックを受けたのでココに書く。 実は、isatty(fd) という関数があり、 指定したファイルディスクリプタが端末かどうか調べる事が出来ます。 つまり、出力先が端末だったとき、エスケープシーケンスを付加し、 端末ではなく、別のプログラムの標準入力に渡されたときは、 エスケープシーケンスを除去しています。 以下は、 標準出力がターミナルだったときのみ "this is terminal" と出力します。 1 #include <stdio.h> 2 #include <unistd.h> 3 4 int

  • 1