タグ

Cに関するyanajyのブックマーク (28)

  • 【アルゴリズムとデータ構造】 情報科学・システム工学 教育向け フリー素材集

  • pwrite(2)を試してみた - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ

    先週分のLWNを見ててpwrite()というシステムコールを見つけたので、 どんな動作なのか試してみた。 manはこちらに。 manを読むと、指定したオフセット位置から指定されたバイト数分データを書き込むけど、ファイルのオフセットは変更しないと書かれているので、こんな感じのコードを書いてみた。 #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <assert.h> int main(int argc, char **argv) { char c; int fd, ret; fd = open("test.txt", O_RDWR); assert(fd != -1); pread(fd, &c, sizeof(c),

    pwrite(2)を試してみた - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
    yanajy
    yanajy 2010/03/19
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • C言語によるソケットプログラミング - 武田研究室

    必要なヘッダファイル † ソケットAPIを用いたプログラムでは、以下のヘッダファイルが使われることが多い。 詳細についてはソケットAPIのリファレンスを参照すること。 stdio.h stdlib.h string.h unistd.h sys/socket.h sys/types.h arpa/inet.h ↑ ファイルディスクリプタの作成 † ソケットAPIの関数『socket』を用いてファイルディスクリプタを生成する。 この関数は引数で『通信ドメイン』『通信タイプ』『通信プロトコル』を指定し、戻り値としてネットワーク通信に使用するファイルディスクリプタを返す。 int sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) ここでは、通信ドメインとしてInternet(PF_INET)・通信タイプとして連続した信頼性のある双方向ストリーム(S

  • ソケットの使用法

    ソケットの概要 ソケットとはアプリケーションをインターネットに接続するための機構です。 インターネット通信をサポートするサーバーやクライアントには必ずソケットが必要になります。 以下では、ソケットの実際的な使い方を、 サーバーを作成する場合とクライアントを作成する場合とに分けて解説します。 なお、ここで説明する内容は、開発環境がWindowsであることを想定しています。 Unixでソケットを使いたい場合は別の文献を参照してください。 また、ソケットを使う際に注意するべきことがあるので、「注意!」にまとめました。 プログラミングの際には必ず一読してください。 サーバーの作成法(TCP) ここではTCP通信をベースとしたサーバーの構成法について解説します。 図1にサーバー作成での基的な操作の流れを示しました。 この章では初期設定に必要なsocket, bind, li

  • setsockopt

    int setsockopt( SOCKET s, int level, int optname, const char* optval, int optlen );

  • C言語 - 多次元配列とポインタ

    malloc, calloc関数を使って動的に多次元配列を作成するには、各アドレスに対して必要なサイズを割り当てる。多次元配列で注意しなければならないのは、動的に生成したアドレスは順番に並んでいるわけではない。 #include <stdio.h> #include <malloc.h> int main(int argc, char** argv) { int **a; int i, j; a = malloc (sizeof(int*) * 2); //この時点で、aはint型のポインタを2個持つ //各ポインタに対して、サイズを割り当てる for (i = 0; i < 2; i++) { a[i] = malloc(sizeof(int) * 2); } for (j = 0; j < 2; j++) { for (i = 0; i < 2; i++) { a[j][i] = i

    yanajy
    yanajy 2010/03/18
  • [C言語]Socket間通信 echoサーバを作る « イイ!! プログラミング Blog

    ネットワークを通して、データをやりとりするためには、Socketに対して、読み書きをします。 C言語による、Socket間通信は、下記のような手順になります。 socket() によりソケットを開く bind() により、コネクションを受けつけるIPアドレス・ポート番号と ソケットとを対応づける listen() によりクライアントからの接続待ち受け状態にする accept() によりクライアントからの接続を受け付ける read(), write(), send(), recv() などを用いて通信を行う close() によりソケットを閉じる 実際に文字列を単純にクライアントに返すだけのプログラム(echoサーバ)を書いて見ます。 ちなみに、コードでは、1回やりとりが終わると、サーバプロセスも終了します。 #include <stdio.h> #include <stdlib.h> /

  • fstat,stat,_wstat - RAD Studio

    sys\stat.h:インデックス への移動 ヘッダー ファイル sys\stat.h カテゴリ 入出力ルーチン プロトタイプ int fstat(int handle, struct stat *statbuf); int stat(const char *path, struct stat *statbuf); int _wstat(const wchar_t *path, struct _stat *statbuf); 説明 ファイルの情報を取得します。 fstat は、handle に関連付けられたファイルまたはディレクトリについての情報を、stat 構造体に格納します。 stat は、指定されたファイルまたはディレクトリについての情報を、stat/_stat 構造体に格納します。ファイルの名前は path です。 statbuf は、stat/_stat 構造体(sys\stat

  • mmap()を利用する高度なファイルI/O (1/5) :TEDIA

    TEDIA会員に登録したメールアドレスとパスワードを入力してください メールアドレス: パスワード: パスワードを忘れた方はパスワードの確認を行ってください。 TEDIA会員へのご登録がお済みで無い方はこちらで登録ができます >> テクノロジーポータル TEDIA トップページへ戻る << mmap()を利用する高度なファイルI/O これは全7回でLinux I/Oファイルのシステムコールを解説する連載の第4回です。今回は、mmap()の使い方を学習していきましょう。内容は、ロバート・ラブ著『Linux System Programming: Talking Directly to the Kernel and C Library(Linuxシステムプログラミング-カーネルおよびCライブラリへ直接話しかける:仮題)』第4章からの抜粋です。(原著はオライリーより2007年に出版、ISBN:

  • メモリ管理

    メモリマップドファイル オペレーティングシステム http://funini.com/kei/mmap/ 今日の流れ (12/10) デゖスクの話の残り デゖスクを高速に使う工夫 メモリとデゖスクの簡単なまとめ メモリマップト・フゔ゗ル (mmap) http://funini.com/kei/mmap/ デゖスク (ハードデゖスク, DVDなど) 電源を切っても消えない 物理的にはシリンダ・ブロックに分かれている OSによって抽象化され,フゔ゗ル単位でデータ を管理できる ゕクセスはメモリに比べて遅い →高速化する工夫 ディスクについて (前回の続き) http://funini.com/kei/mmap/ 連続した領域への割り当て 一度に読み出すのに都合の良いブロック (例: 同じシリンダ(円周)内の全ブロック)に フゔ゗ルの連続した領域を割り当てる cf. い

  • C言語: UNIX最速ファイルコピー

    Created: Kazuki Ohta, 2006/06/14 Last Update: Kazuki Ohta, 2006/06/14 「write(2)の正しい使い方」と同じく、OS演習でやった事の延長線の記事を書いてみる。お題は「UNIX上で大規模ファイルを最速でコピーする方法」だ。一般的に、UNIXでファイルをcopyする際には以下のような方法が有る。 read -> write read -> write with posix_fadvice mmap -> mmap -> memcpy -> fsync mmap -> mmap -> memcpy -> fsync with madvise mmap -> write mmap -> write with madvise read, write, mmap辺りは良いとして、posix_fadviseというシステムコールが有

    yanajy
    yanajy 2009/09/28
  • oprofileで性能分析→ボトルネック特定

    性能分析に有用な性能監視ツールOProfileを見つけたのでメモ。CPUのイベント(キャッシュミスなど)を計測することができるらしい。 OProfileのサイト http://oprofile.sourceforge.net/ Linux Kernel Profiling HOWTO http://www9.ocn.ne.jp/~puppet/docs/Linux-Kernel-Profiling-HOWTO/x86.html ↑具体的な使い方が載っている コードを読むな、理解しろ(ユメのチカラ) http://blog.miraclelinux.com/yume/2006/10/post_e3d6.html ↑ソースから、キャッシュミスの多発している行を特定するのにOProfileを活用。 http://blog.miraclelinux.com/yume/2007/08/post_89

    yanajy
    yanajy 2009/09/28
  • コンピューター:C言語講座:mmapについて

    コンピューター:C言語講座:mmapについて 概要 mmapはファイルをメモリにマッピングするものです。わかりやすく言うと、UNIXのOSが行なっているページングやスワッピングを自プロセスで行なうようなものです。 これを使うメリットとしては、メモリ確保サイズが確保開始時に決定できない場合、簡単にはmalloc()で適当な量を確保し、足りなければrealloc()を使用して拡大することになりますが、realloc()を繰り返すとメモリ領域中に空きが出来やすく、大規模なシステムでは実際使用しているメモリより空き空間の方が数倍大きくなってしまい、メモリ不足で実行不可能になる場合があります。mmapを使用すれば、別々に拡大していくような管理が可能なので、また、スワップスペースとは別の位置に置くことにより、多数の動的メモリを必要とする場合に安全に動作することが可能になる場合があります。ただし、基

    yanajy
    yanajy 2009/09/25
  • libaio(Linuxの非同期I/Oライブラリ)の使い方 - moratorium

    libaio(Linuxの非同期I/Oライブラリ)の使い方 2007-06-05 (Tue) 4:53 Unix Linuxで非同期I/Oを行うためのライブラリ「libaio」の使い方を書いてみる事にする。少し昔の話になるが、lighttpdが使用し、スループットを80%も上げたらしい。 TOEFLに向けて転置ファイルについての論文(Inverted files for text search engine [moffat 06])でReading対策をしていたところ、意外とスニペット(検索にヒットした箇所の前後の文章)を作るところが時間がかかるという事を教えてもらったので、適当にそれを例題にしてみる。具体的には以下のようなコードを非同期I/Oを使用して速くなるかどうか見てみる。 for (unsigned int i = 0; i < files.size(); i++) { FILE*

    yanajy
    yanajy 2009/09/24
    [I/O]
  • review of C functions

    MS-Windows上では mode 文字列にはさらに 't' または 'b' を 加えることでテキストファイルとして読み書きするか、 バイナリファイルとして読み書きするかの選択ができます。 UNIX上ではその意味はありません。 fdopen関数は既に低水準でファイルが開いている場合に、 それを高水準でも扱えるように、その descriptor を扱う file stream を 作成します。 fileno関数は file stream の核をなす file descriptor の番号を返します。 fputs,puts,fgets,gets 一行読み書き #include <stdio.h> int fputs(const char *str, FILE *stream) int puts(const char *str) char* fgets( char *str, size_t s

    yanajy
    yanajy 2009/09/15
  • C(++)言語: valgrindの使い方

    ubuntu% uname -a Linux ubuntu 2.6.12-10-386 #1 Sat Mar 11 16:13:17 UTC 2006 i686 GNU/Linux ubuntu% valgrind --version valgrind-3.0.1 (0) 目次 Valgrindに含まれるツール Memcheck: メモリエラーを検出する(default) Cachegrind: キャッシュミスを検出する Massif: ヒーププロファイラを使う まとめ valgrindの使い方とエラーメッセージを整理してみた。「valgrind --leak-check=full command」というコマンドラインをよく用いる。これによりメモリ周りのバグを検出出来る。 --tool=cachegrindではプログラム実行時のキャッシュミス率を測定する事が出来る。cg_annotateを

  • 低水準ファイル入出力関数を使おう - 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

    yanajy
    yanajy 2009/04/21
  • http://www-online.kek.jp/~yasu/Kenshu/measurement.html

  • Loading...

    yanajy
    yanajy 2009/01/18