タグ

Cに関するkenkitiiのブックマーク (38)

  • Big Sky :: clib の使い勝手にマジ感動した

    C言語でアプリケーションを書くのは他の言語と比べて少し気合が必要ですよね。例えば HTTPからデータを取得する 取得したデータを json パースする 結果の一部を色付きで表示する こんな場合、C言語プログラマは 「HTTP か、じゃぁcurlかな」 「JSON か、parson かな」 「色表示か...エスケープシーケンスでもいいけどWindowsがなー...」 といった事を考え、そこから curl や parson といった資材の調達を始める事になります。途中で新しい機能を追加したくなり、それを外部ライブラリに頼る場合だとその都度資材を調達する必要があり、思考を停止しなければなりません。 この辺は rubyperl、nodejs、golang 等の様に、ちょっとした手間だけで済ませたい物です。 またC言語の場合、ヘッダファイルはシステムの include フォルダに提供元が期待す

    Big Sky :: clib の使い勝手にマジ感動した
  • lsコマンドをハックしてみよう

    ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog こんにちは、ショッピング事業部開発部の吉野です。 Yahoo!ショッピング開発部では新人エンジニア向けにコマンドのソースコードを読むことを奨励しています。 その初期の題材として、lsコマンドがよく挙げられます。 今回は「lsコマンドをハックしてみよう」と題し、lsコマンドについてお話しさせていただきます。 突然ですがエンジニアの皆さん、lsコマンドのソースコードを読んだことはありますか? 読んだことのない方はぜひ一度、目を通しておくことをおすすめします。 意外と知られていませんが、lsはcd,pwdなどのコマンドと違いシェルの組み込みコマンドではありません。 一口にlsと言っても、複数のソースコードが存在します。 代表的なのはGN

    lsコマンドをハックしてみよう
  • Amazon.co.jp: C言語 デバッグ完全解説 (Gihyo Technology): 坂井弘亮: 本

    Amazon.co.jp: C言語 デバッグ完全解説 (Gihyo Technology): 坂井弘亮: 本
  • OMake つかったらC言語でプログラム書く手間がバカみたいに減った - 日記を書く[・ _ゝ・]はやみずさん

    OMakeすごい。OMakeはマジですごい。 OMakeはGNU makeの代替品みたいなものなんだけど、正直なところこのツールの強力さはGNU makeと比べると失礼なくらいすごい。これのおかげで、「コード修正→ビルド→デバッグ→コード修正→・・・」のループの、ビルドにあたる作業がほぼ消え去った。 ファイルの依存関係の解析がとにかくすごい。よくあるユースケースなんかの場合、最小限の手間でほぼ完璧に依存関係を網羅して、よしなにビルドしてくれる。 とりあえず、はやみずが実際に使ってみたケースを例にとってそのすごさの一端を紹介しようと思う。 case study 論より証拠ということで、自分が OMake を試しにつかってみたケースを紹介する。C言語でスタティックライブラリを作っていて、それに加えて簡単なテストプログラムを書いている。 /include/ 以下にヘッダファイルが全部ある /sr

    OMake つかったらC言語でプログラム書く手間がバカみたいに減った - 日記を書く[・ _ゝ・]はやみずさん
  • Google Suggestのようなものを高速に実現するサーバsuggested - グニャラくんのグニャグニャ備忘録@はてな

    Google Suggestのようなものを高速に実現するサーバsuggestedというものを書いてみた。 が、しばらく放置していた。とりあえず公開してみる。 特徴 epollやkqueueを使っていてネットワーク部分が速い Sennaを使っていてSuggest部分が速い Sennaを使って正規化している。「トン」とか「ミリバール」(組み文字)とか「Wiki」(全角)とかでも検索可能 置き場 CodeResosに置いてあります。 http://svn.coderepos.org/share/lang/c/suggested/trunk 一応、2008/01/17バージョンの全ソースコードを貼っておこう。 #include <sys/types.h> #include <sys/time.h> #include <stdlib.h> #include <err.h> #include <sys

    Google Suggestのようなものを高速に実現するサーバsuggested - グニャラくんのグニャグニャ備忘録@はてな
  • mixi Engineers’ Blog » 言語バインディングを書こう

    世田谷の某所から原宿まで自転車通勤しているのですが、そろそろ寒くなってきたので電車に切り替えようかと悩み中のmikioです。今回はTokyo Cabinetのスクリプト言語バインディングについて述べます。 スクリプト言語バインディングとは TCはC言語で実装されたライブラリで、C言語(C89、C99)およびC++言語のプログラムから利用することができます。CやC++は各種の計算処理やシステムコールの呼び出しを直接的に記述できるので高速に動作するプログラムを作ることができる反面、ポインタ演算やメモリ管理などで致命的なバグを潜ませやすいので非常に注意深くコーディングを進めなければいけません。つまり、プログラムの実行速度は速いが、開発速度は遅いということです。 それに対して、PerlRubyをはじめとするいわゆるスクリプト言語は、実行速度はCやC++に劣るものの、高水準かつ直感的な文法と強力な

    mixi Engineers’ Blog » 言語バインディングを書こう
  • mixi Engineers’ Blog » 最適化しよう?

    エンジニアブログを私物化していると専らの評判のmikioです。ブログを書かないと死んでしまう病に冒されているのでしかたないですね。個人ブログ時代よりもわかりやすくする努力はしているんですけどね。さて、今回はソースコードの最適化による高速化について述べます。 ベンチマークテスト TCはQDBMや他のDBMより高速であるという主張をしたいのですが、その根拠としてベンチマークテストの結果が必要となります。そこで、データベースに100万レコードを格納する処理と、そうして作ったデータベースから全てのレコードを探索する処理の時間を、各DBMで計測してみました(TCのパッケージのbrosというディレクトリにテストコードが入っています)。実行環境は、Thinkpad T60(Intel(R) Core2 CPU T7200 @ 2.00GHz)上のLinux version 2.6.16です。 ハッシュ

    mixi Engineers’ Blog » 最適化しよう?
  • Java running faster than C

    Note: A lot of people seem to be taking this post to be the "Ultimate C vs Java shootout". It's not. Performance is a very complex topic. My only real point is this: Java (which used to be slow) has reached the class of "fast languages". For the majority of applications, speed is no longer a valid excuse for using C++ instead of Java. I just saw this page comparing the performance of several langu

    kenkitii
    kenkitii 2007/06/15
    Java (which used to be slow) has reached the class of "fast languages".
  • [ruby] Contents of /branches/ruby_1_8_6/README.EXT.ja

    Revision 11752 - (show annotations) Thu Feb 15 08:11:50 2007 UTC (15 years, 7 months ago) by knu File size: 35219 byte(s) Branch off ruby_1_8_6 from ruby_1_8 in preparation for the forthcoming 1.8.6 release.

  • netswitch! | RubyInlineがすごい

    Posted by nanki Mon, 12 Mar 2007 05:14:00 GMT Rubyコード中にCのコードを埋め込めるRubyInlineを使って、 ボトルネックとなっているメソッドを置き換える。 # rubyinline.rb def benchmark s = "a" * 10000 test = Test.new t = Time.now 1000.times{test.string_xor(s, s)} Time.now - t end class Test def string_xor(str1, str2) result = str1.clone str1.length.times do |i| result[i] ^= str2[i] end result end end b1 = benchmark begin require 'inline' class T

  • Slot Online Gacor Terbaik - Get2Lucky

    Bocoran Cara Menangkan Undian Berhadiah Luar Biasa Saat ini banyak sekali orang yang percaya bahwa mereka bisa memenangkan undian berhadiah yang biasanya diselenggerakan oleh brand-brand ternama. Hal ini tida terlepas dari kepercayaan beberapa orang bahwa “hoki” atau keberuntungan sedang memihak kepada mereka di jaman yang sedang serba sulit ini. Memang sebagaian orang banyak yang merasa kecil hat

    Slot Online Gacor Terbaik - Get2Lucky
    kenkitii
    kenkitii 2007/03/09
  • 浮動小数点演算ではまった話 - bkブログ

    浮動小数点演算ではまった話 浮動小数点演算のありがちな問題ではまりました。 いろいろ調べているうちに x86 特有のちょっとおもしろい 現象に遭遇したので紹介したいと思います。 パーセンテージの計算 簡単な C のプログラムでパーセンテージを計算しようと思い、 次のようなコードを書きました。 int x, y; ... int a = (double)x / y * 100; int a = x * 100 / y としないのは、 x が大きい場合に x * 100 が オーバーフローを起こす (INT_MAX を越える) ためです。 このコードは一見、期待通りに動いていたのですが、 しばらく使っていると、手元の環境では x = 53, y = 100 のときに a は 53 ではなく 52 になることに気づきました。 これは次の理由によります。 式の最初の (double)53 / 10

  • Macros (The C Preprocessor)

    3 Macros ¶ A macro is a fragment of code which has been given a name. Whenever the name is used, it is replaced by the contents of the macro. There are two kinds of macros. They differ mostly in what they look like when they are used. Object-like macros resemble data objects when used, function-like macros resemble function calls. You may define any valid identifier as a macro, even if it is a C k

  • どのようにしてlibcは後方互換を保つのか?(その1)

    [最新版] [一覧] << == >> 予定 2008/10/20(Mon): 月命日 TODO 99:ネコのいない生活に慣れる 2007/1/18(Thu)○ どのようにしてlibcは後方互換を保つのか?(その1) 国際標準規格(ISO)としてのCは現在のところ ISO/IEC 9899:1990 (C90) 制定 - 米国内規格 ANSI X3.159-1989(C89) と同じ ISO/IEC 9899/AMD1:1995 (C90:AMD1 あるいは C95) 追補 - 国際化対応関数(mbrtowcなど)の追加 ISO/IEC 9899:1999 (C99) 改訂 - 変更点多すぎなんで このへん読んでください と3つのバージョンが存在します、これらはすべて後方互換が保障されています。 ソースレベルでの後方互換とは C90で書かれたソースコードは一切の修正なしでC99でコンパイル

  • 初級C言語Q&A(4)

    初出: C MAGAZINE 1995年9月号 Updated: 1996-03-12 [←1つ前] [→1つ後] [↑質問一覧] [↑記事一覧] [ホームページ] malloc, free 動的なメモリの獲得は、C言語ではしばしば使われる手法です。ポインタの理解 が十分なら、 malloc の使い方を理解することにより、複雑なデータ構造を柔軟に処理することが可能 になるでしょう。あまり慣れない人は、十分な大きさの固定サイズの配列を用意 してしまいがちですが、 malloc 自体はそれほど難しいテクニックを必要としません。 Q 【malloc】 malloc は何と読むのか。 A 「えむあろっく」と読む人と「まろっく」と読む人を知っていますが、それ以 外の読み方は聞いたことがありません。個人的には、来の意味がmemoryを allocateする、ということなので、m+allocと考えるの

    kenkitii
    kenkitii 2007/01/26
  • C FAQ 7

    7.1: 以下のプログラムはなぜ動かないのか。 char *answer; printf("なにか入力してください:\n"); gets(answer); printf("あなたは \"%s\" と入力しました\n", answer); A: ポインター変数answerは応答を貯える場所として関数gets()に渡される が、その時点ではanswerは有効な領域を指していない。すなわちポイ ンターanswerは、どこを指しているのかわからない(ローカルな変数 は初期化されることはないし、たいていゴミが入っている。「answer」 がヌルポインターとして始まることさえ保証されていない。質問1.30 と5.1を参照のこと)。 上の質問のプログラムを修正する一番やさしい方法は、ポインターの 代りにローカルの配列を使って、コンパイラに領域の割当てをまかせ ることである。 #include <stdi

    kenkitii
    kenkitii 2007/01/26
  • メモリの動的確保

    こんなんでどうでしょう? ・・・gccでコンパイルは通りますが、バグのチェックはしていません ^^; #include <stdio.h> #include <stdlib.h> typedef struct LINK{ struct LINK * next ; int num ; } LINK ; int main() { int tmp ; LINK * root ; LINK * ptr ; /* バッファの確保 */ ptr= root= (LINK *)malloc( sizeof( LINK )) ; /* 確保失敗まで */ while( ptr != NULL ){ if( scanf("%d", &tmp ) == 1 ){ if( tmp == 0 ){ /* 0が入力されたら終わり */ break ; } } /* 数値の格納 */ ptr->num= tmp ;

    kenkitii
    kenkitii 2007/01/25
  • clmemo@aka: Emacs で C 言語プログラミングを始める人へのイントロダクション

    Emacs エディターで C 言語のプログラムを書く人向けに、入門用の解説がないように思う。そこで、知っておくと便利な機能をまとめてみた。 読者は、Emacs の操作とカスタマイズが最低限できる人を対象にしている。つまり、C-x C-f といったショートカット・キーが使えて、.emacs の設定ファイルがいじれる人。各機能について、基的な使い方とその効果、あと最低限の設定について書き出した。 目次 ソースの色付け インデント アラインメント コメント info マニュアル スペル・チェック タグ・ジャンプ 関数名の補完入力 コンパイルとエラー行ジャンプ ChangeLog ファイル 1. ソースの色付け Emacs は、C 言語のソース・ファイルを解析して、if や for といったキーワードに対して、自動で色を付ける。 色を付けることでソースにメリハリが生まれ、可読性が上がる。また、ス

    clmemo@aka: Emacs で C 言語プログラミングを始める人へのイントロダクション
  • Unix Programming Frequently Asked Questions 日本語訳 - Table of Contents

    このFAQについて 1 プロセス制御 1.1 新しいプロセスの生成: fork() 1.1.1 fork()は何をするのですか? 1.1.2 fork()とvfork()の違いは何ですか? 1.1.3 forkによる子プロセスを終了するときにexitよりも_exitを使うのはなぜですか? 1.2 環境変数 1.2.1 どうすればプログラム内で環境変数の値を取得・設定できますか? 1.2.2 どうすれば全ての環境変数を調べられますか? 1.3 どうすれば一秒未満のsleepができますか? 1.4 粒度の細かいalarm()はどうすれば得られますか? 1.5 どうすれば親プロセスと子プロセスの間で通信できますか? 1.6 どうすればゾンビプロセスができることを防ぐことができますか? 1.6.1 ゾンビプロセスってなんですか? 1.6.2 どうすればゾンビプロセスになることを防げますか? 1.7

  • Pythonでアルゴリズム - Konnichiwa, A doumo

    これはなんですか? 奥村晴彦氏の著書「C言語による最新アルゴリズム事典」をPythonでやろうと決意。Rubyに翻訳されていたので、Pythonでもやってみようと。でも実は書籍はもっていなくてCとRubyのソースを見つつ翻訳しています。1日1個ペースで進んでいます。 やっているうちにこのが欲しくなってきました。 個人のPython力を高めるために始めましたので、間違いが含まれているかもしれません。ご指摘等ございましたら連絡[syobosyobo at gmail dot com]ください。 ちょっと方針をかえて、ctopyで訳すことにした。またまた方針をかえて、、、ctopyはあまりつかえない。ちょっといじってやらないと、出力がよくない。コメントとか入ってると、うまく変換してくれないし。 で、そのあとPythonらしい書き方で書いていこう、かと。どうなるかわかりませんが。