タグ

cに関するkiririmodeのブックマーク (21)

  • Cでのポインタの読み方

    Cでのポインタの読み方 Cのポインタの読み方は、ルールを知らないと摩訶不思議です。 ルールを覚えれば、 int (*p[5])[3]; char (*(*fp)(void))(int); なんてのも解読する事ができます。 大事な前程 ポインタを読む際には、「英語で読む」必要があります。 「え~、英語~」 と思う方もいるかもしれませんが、逆に日語で読む方が大変です。 基ルール ルール 後置演算子が優先。 関数の() 配列の[] 前置はあとで。 要は、「後ろに何かあったら、後ろが優先」です。 演算子の英語での読み方 * pointer to ... () function returning ... [] array of ... Lesson 1 まず、演算子が単独で出てくる場合です。 Lesson 1-1 pointer to ... int *p; これは、まずpを見ましょう。 i

    kiririmode
    kiririmode 2012/03/27
  • 多数の言語に対応したGitライブラリ·libgit2 MOONGIFT

    libgit2はC製のオープンソース・ソフトウェア。ここ1、2年で急速に人気を高めたバージョン管理システムがGitだ。特にRuby開発者の間で好んで使われているが、最近では企業内でも利用されるようになっている。今後も実績を積み重ねていくことだろう。 公式サイト そんなGitはシステム開発の現場以外でも使われるようになっている。例えばコンテンツのバージョン管理に使われるなど、ソフトウェアのバックエンドとして活用するのにもぴったりなのだ。そんなシステムとGitを連携させたい時に使えるのがlibgit2だ。 libgit2は単体で利用するソフトウェアではない。C言語で開発されたGitライブラリで、高速さとマルチプラットフォームでの動作、多彩な言語へのバインディングが特徴となっている。Windows/Mac OSX/Linuxで動作し、かつ例えばWindowsであればMS VCでコンパイル可能だ。

  • memologue - UNIX上でのC++ソフトウェア設計の定石 (2)

    鉄則2: シグナルハンドラで行ってよい処理を知ろう sigaction関数で登録したシグナルハンドラで行ってよい処理は非常に限定されている 次の3つの処理だけが許されている 自動変数の操作 “volatile sig_atomic_t” 型の大域変数の操作 「非同期シグナルセーフ」関数の呼び出し これ以外の処理を記述しないこと! 説明: シグナル受信時に何らかの処理を行うためには、シグナルハンドラと呼ばれる関数を用意し、それをsigaction関数でシグナル名と紐付けておけばOKです。しかし、シグナルハンドラ内で行ってよい処理は、上記の通り非常に限定されています。これを把握しないまま奔放なコードを書くと次のような現象が起き得ます: 問題1: プログラムがデッドロックする危険がある タイミングに依存する、再現困難なバグの原因となる デッドロックの発生が典型例だが、それ以外にも関数の戻り値不正

    memologue - UNIX上でのC++ソフトウェア設計の定石 (2)
  • 並列イベント駆動I/Oフレームワーク「mpio」リリース - Blog by Sadayuki Furuhashi

    分散KVS kumofs のコードは、全体で約2万行です*1。 そのうち、ネットワークI/Oやプロトコルに関するコードは約1万行*2で、全体の約半分を占めています。 ロジックは残りの半分*3だけで実装されています。 この実例から分かりますが、kumofsのような分散アプリケーションを開発するにはI/O周りの実装が大変で、とてつもなく大きな障壁になっています。*4 さらに今日では、性能を稼ぐためにマルチスレッド化が必須です。また、多数のクライアントを少ないリソースで効率よく相手にするには、非同期・イベント駆動型のアーキテクチャも必要になります。さらに、究極的な性能を達成すべく GC を利用しない C++ においては、実装のみならず設計も大変です。 これに加えてソケットAPIの難解な挙動に対処にしなければならないため、C言語やC++によるネットワークプログラミングは、vimの使いこなしなどと同

    並列イベント駆動I/Oフレームワーク「mpio」リリース - Blog by Sadayuki Furuhashi
  • signalについて(後篇):CodeZine

    はじめに シグナルについての解説最終回です。今回はシグナルを扱う上での注意点や、よりよい実装方法の提案、シグナルの未来等について説明します。 過去の記事 signalについて(前篇) signalについて(中篇) 5. 実装上の注意点 前回まで説明してきたとおり、シグナルは気軽に使うことができる便利なプロセス間通信です。しかしシグナルには、やってはいけないことや気をつけるべき点が多く存在します。以下、代表的な注意点を挙げます。 5.1 最適化問題 volatileはそれほど使われない宣言修飾子ですが、これは最適化を制御する修飾子です。なぜこの修飾子がシグナルと関係あるのかについてですが、先にソースコードを示します。 /* 1. gcc -g -W -Wall signal_test_volatile.c -o signal_test_volatile 2. gcc -g -W -Wall

    signalについて(後篇):CodeZine
  • ファイルディスクリプタについて(6) ~多重I/Oの性能とC10K問題

    コネクション確立の性能 まずはクライアントとのコネクションが確立するまでの時間を計測し、コネクション数に応じた数値の変化を観測します。ループバックアドレス(127.0.0.1)を通してコネクションを張った直後にpoll(2), epoll(7)などの多重I/O用関数を使用します。多重I/O用関数を使用する前で計測を開始、関数通過後accept(2)が終わって新たなディスクリプタが生成された直後までにかかった時間を計測します。その計測をコネクション数(=ディスクリプタ数)の増加との関わりで検証します。 クライアント用のプロセスと分けてしまうと、accept(2)用ソケットのbacklog(listen(2)の第2引数に設定する値)に達してしまい、コネクション待ちで余計なサスペンドが発生するので測定値にばらつきが出てしまいます。今回は多重I/O用関数を使用する直前にクライアントからのconne

    ファイルディスクリプタについて(6) ~多重I/Oの性能とC10K問題
  • ファイルディスクリプタについて(6) ~多重I/Oの性能とC10K問題

    はじめに 前回は、複数のファイルディスクリプタを一元管理する「多重I/O」機能について紹介しました。今回は、多重I/Oの性能と問題点について検証していきます。 連載概要 第1回:ディスクリプタの概要 第2回:イベント用ディスクリプタ「eventfd」の特徴 第3回:タイマー用ディスクリプタ「timerfd」の特徴 第4回:シグナル用ディスクリプタ「signalfd」の特徴 第5回:多重I/O「Multiplex I/O」の種類の特徴、使い方 第6回:多重I/Oの性能とC10K問題 第7回:シグナル駆動I/Oの特徴、使い方 第8回:非同期I/O「Asynchronous I/O」の使い方と性能差 第9回:ファイルディスクリプタパッシングの特徴、使い方 サンプルプログラムは100行前後程度までは画面に記載します。全プログラムは圧縮してページ上部よりダウンロード可能にしています。makeコマンド

    ファイルディスクリプタについて(6) ~多重I/Oの性能とC10K問題
  • 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() からは(

    kiririmode
    kiririmode 2010/03/03
    TIME_WAITについて一番わかりやすい
  • OpenMPの基礎構文

    はじめに 昨今マルチコアCPUは一般化し、並列化処理の重要度がどんどん高まってきました。この流れはもう変わらないでしょう。ですから、我々開発者にとって並列処理の知識は絶対に必要なものです。とはいえ、日々の業務をこなしつつ資料が少ない並列化処理を身につけることは大変です。 そこで今回筆者は、並列化処理を実現するOpenMPの入門記事を書くことにしました。OpenMPを選択した理由は、一番効率が求められているのはC/C++プログラマーだと考えたからです。C/C++プログラマーの方々が並列処理を習得するお手伝いができれば幸いです。 なお、この連載で解説に使用するサンプルコードはあくまでもOpenMPの基礎を理解するための便宜的なものであり、実務でOpenMPを使用する際にはよく理解してから用途に適したプログラミングを行ってください。 対象読者 筆者が想定している読者はCの基的文法をマスターし、

    OpenMPの基礎構文
  • Programming UNIX Sockets in C - Frequently Asked Questions

    Created by Vic Metcalfe, Andrew Gierth and other contributers (Transrated into Japanese by: Keisuke Mori)May 21, 1998 この文書は、UNIX 上での ソケットインターフェースを用いた TCP/IP アプリケーションプログラミングについて、頻繁に行われる質問とその 解答を集めたものです。 1. 一般的な情報と概念 1.1 更新情報 1.2 この FAQ について 1.3 この FAQ はどのような人向けでしょうか? 1.4 ソケットって何ですか? 1.5 ソケットはどのように動作するのでしょうか? 1.6 [あるの題名] というのソースコードはどこから取得できますか? 1.7 どこでもっと情報を得ることができますか? 2. クライアントとサーバ(TCP/SOCK_STREA

  • C言語: write(2)の正しい使い方

    Created: Kazuki Ohta, 2006/04/17 Last Update: Kazuki Ohta, 2006/06/14 学校の課題(OS演習)で、open, read, write, close等のシステムコールを使用した課題が出された。システムコールなので当然失敗する事が有り、エラーチェックを正しく行う必要が有るのだが、writeについてはweb上に有る資料も使い方を間違っているモノが多かった。僕も課題では間違えて再提出をくらってしまった。なので、ここにwriteシステムコールの正しい使い方を書き記しておく。 まずは $man 2 write の一部を抜粋してみる。 NAME write - write to a file descriptor SYNOPSIS #include ssize_t write(int fd, const void *buf, si

  • やねうらお―よっちゃんイカを買いに行ったついでに家を買う男 - プログラミング名著100選

    プログラミングの書籍のなかから、100冊を選りすぐってみたい。 まずはC/C++言語系。 「Effective C++」「More Effective C++」「Effective STL」この3冊は外せないだろう。持ってなければモグリだ。(「Effective C++」「More Effective C++」は、原著第3版が出たのでリンク差し替えた。) 「Modern C++ Design」に関しては、どうせ使えもしない(?)lokiの解説がてらtemplateの解説をしてあるだけなので、いまであれば、boostのtemplate解説である「C++ Template Metaprogramming」のほうがいいような気もするが、これまだ邦訳されてないので英語の苦手な人は「Modern C++ Design」以外の選択肢は無い。 あと例外安全について書いてあるとして「Exception

    やねうらお―よっちゃんイカを買いに行ったついでに家を買う男 - プログラミング名著100選
    kiririmode
    kiririmode 2008/04/06
    c/c++のお勧め本
  • emacs C++ 開発環境 link集 - niitsumaの日記

    emacsでc++開発を行うための情報を集めました。まとめをここでしています 以下それぞれのリンク Emacs で C 言語プログラミングを始める人へのイントロダクション 初心者向けdocment 以下の2項目が役立つ タグジャンプ ここで説明しているtagファイルの作成方法 $ find . -name "*.[chCH]" -print | etags - はubuntu7.10では動かなかった 関数名の補完入力がM-tabでできる タグジャンプはここで説明してるetagより後述のgtagの方が便利 Benjamin Rutt's Emacs C development tips (English) complieをする窓の大きさを小さめにする方法 インデントを自分好みにする方法 etagの使い方。Emacs で C 言語プログラミングを始める人へのイントロダクション よりも詳しく解説

    emacs C++ 開発環境 link集 - niitsumaの日記
  • CとC++の本 - なつたん

    ・Cプログラムの中身がわかる 表紙は可愛い犬ですが、中身は狼なので注意が必要。GNU Development Toolsか、プログラミングの力を生み出す―インテルCPUのGNUユーザへが内容的に近い。gccを使って、簡単なCソースがどのようなアセンブラになり、x86アーキテクチャの上で動作するかを丁寧に書いてあります。 if文や、関数呼び出し等、C言語の制御構造が一通り説明されているのは素晴らしい。合わせて、gdb等のツールの使い方も説明されている。じっくりと読んで、自分でコード書いてみて結果を確認すれば、この辺りの話くらいは普通について行けるようになります。まさにこれからバイナリアンを目指す人の為の。このをとっかかりに、GNU Development Toolsを読むのが良いと思いますが、それほど内容はかぶっていないので、両方読もう。GNU Development Toolsに比

    CとC++の本 - なつたん
  • CC Mode Manual:

    CC Mode is a GNU Emacs mode for editing files containing C, C++, Objective-C, Java, CORBA IDL (and the variants PSDL and CIDL), Pike code and to a certain extent, AWK code See 節 12. Status of AWK Mode. It provides syntax-based indentation, font locking, and has several handy commands and some minor modes to make the editing easier. It does not provide tools to look up and navigate between function

    kiririmode
    kiririmode 2007/12/17
    cc-modeのマニュアル
  • C/C++ リファレンス

  • 共有ライブラリの作成

    $ cc -Aa -c +z length.c volume.c mass.c $ ld -b -o libunits.sl length.o volume.o mass.o

  • ISO/IEC 9899:1999 - Programming languages C (n1124.pdf)

    WG14/N1124 Committee Draft — May 6, 2005 ISO/IEC 9899:TC2 Contents Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv 1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2. Normative references . . . . . . . . . . . . . . . . . . . . . . . 2 3. Terms, definitions, and symbols . . . . . . .

    kiririmode
    kiririmode 2007/06/15
    c99
  • ISO/IEC JTC1/SC22/WG14 - C

    2024-06-14: projects | documents | contributing | meetings | contacts ISO/IEC JTC1/SC22/WG14 is the international standardization working group for the programming language C. The current C programming language standard (C17) ISO/IEC 9899 was adopted by ISO and IEC in 2018. To obtain the international standard, please contact your national member body. Work on projects and their milestones include

    kiririmode
    kiririmode 2007/06/15
  • C - tailとqueue : 404 Blog Not Found

    2006年06月24日20:30 カテゴリLightweight Languages一日一行野郎 C - tailとqueue どうせなら、もう少し潰しがきくように書いてみた。 はこべにっき# - C言語でtailっぽいものを書く また,明日学科のC言語のテストがある.C言語なぞ普段まったく使わないもんだから,思い出さねば.てことで,10行固定版tailを書いてみた.以下のソース.まずは、main()の方から。再発明だけでは芸が無いので、行数もオプションとして指定できるようにしてみた。 tail.c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_CHARS_IN_LINE 1024 #include "queue.h" char *new_string(const char *str){ cha

    C - tailとqueue : 404 Blog Not Found
    kiririmode
    kiririmode 2007/06/06
    Cなのにきれいすぎ