タグ

Cに関するclavierのブックマーク (42)

  • Cのプロダクトを作るためにやったこと - Tomohisa Oda

    今年に入って Octopassというプロダクトを公開しました。それは、Linuxのユーザや権限をGithubのTeamと連携して運用を楽にするというツールでした。色んな方々のご協力により、多くのRetweetやはてぶいただいたことで、ある程度、Octopass を必要としそうな人の目に触れたのではないかと思っています。(Githubのスター数が少ないのは今後の課題)その中で「すごく便利」「ぜひ導入したい」というフィードバックは、継続して機能追加していくというモチベーションにつながっていて、非常にありがたいです。 さて、この Octopass は、Linuxユーザ名前解決をするためにの glibc の libnssモジュールをCで実装しています。cgoやその他の言語でShared Objectを吐き出しても良かったのですが、それだと技術的挑戦が足りないとして、触れてこなかったCに挑戦しました

    Cのプロダクトを作るためにやったこと - Tomohisa Oda
  • C言語で部分適用したい!(実は、できるアーキテクチャがあるんです) - 簡潔なQ

    通常、C言語の関数ポインタは、クロージャではない。したがって、関数を部分適用したり、カリー化したり、ローカル変数をキャプチャーした関数ポインタを返したりすることはできない。しかし、実際にC言語が動作する環境のなかには、そのようなことが実現できるものがある。PowerPC64 System V ABIは、そのひとつである。 PowerPC64 System V ABIは、Linux等において高級言語のコードをPowerPC64機械語に翻訳するさいの取り決めである。 多くのABIでは、関数ポインタは関数の最初の命令のアドレスに翻訳されるが、PowerPC64 System V ABIはそれとは異なる定義をしている。具体的には、関数ポインタは以下のような構造体 struct Funptr { void *jump_target; /* ジャンプ先 */ void *initial_r2; /*

    C言語で部分適用したい!(実は、できるアーキテクチャがあるんです) - 簡潔なQ
  • インフラ部門で働くCプログラマの話

    BabelとWebPackを使ってES6からブラウザで動く環境を作るための登壇資料。半分ライブコーディング的に動かしているので、スライドだけだと少々わかりにくいかもしれません。 ※ 後日LIGブログで記事にするかもです

    インフラ部門で働くCプログラマの話
  • Linuxコマンドのソースコードを取得する方法:オリジナルコマンド作成前の勉強向け - Qiita

    追記 以下の情報では、不足があったため、自サイト(debimate.jp)に加筆版をUPしています。 前置き CQ出版社のInterface誌(2016年10月号)に、「レベルアップ! オリジナル・コマンドを 作る」という記事がありました。 この記事中では、C言語(高速な言語)による自作コマンドの作成について、少しだけ触れられていました。 残念な事に、C言語による具体的な作成方法が記載されていませんでした。 この理由には、「紙面の文字数制限」、「bashの特集記事であった事」が考えられます。 C言語で自作コマンドを作成する上で、以下の2点が必要な情報ではないかと考え、 私は、ついカッとなって、記事を作りました(ついでに、Interface誌にもアンケートを出しました)。 ・自作コマンド作成時の参考(既存コマンドのソースコード)の取得方法 ・自作コマンド(実行形式ファイル)の格納先 ちなみ

    Linuxコマンドのソースコードを取得する方法:オリジナルコマンド作成前の勉強向け - Qiita
  • readdir_r は使ってはいけないという話 : 革命の日々 その2

    Unixの世界には readdir_r()というAPIがある。readdir()のthread safe バージョンとしばしば紹介されている。 それぞれの関数宣言は以下 http://man7.org/linux/man-pages/man3/readdir_r.3.html struct dirent *readdir(DIR *dirp); int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result); struct dirent { ino_t d_ino; /* inode number */ off_t d_off; /* not an offset; see NOTES */ unsigned short d_reclen; /* length of this record */ unsigned

    readdir_r は使ってはいけないという話 : 革命の日々 その2
  • C/C++プログラマのための開発ツール - Cybozu Inside Out | サイボウズエンジニアのブログ

    サイボウズ・ラボの光成です。 先日、社内で主にLinux上でC/C++を用いている開発者向けの講義をしました。 「こんなことができる」と知ってもらい、興味を持てば各自で勉強してもらおうと広く浅くツールを紹介しました。 gtags, ASan, Valgrind, addr2line, cppcheck, SystemTap, perfなどです。 興味があれば講義資料「C/C++プログラマのための開発ツール」をごらんください。 コンパイラオプション 受講者には新人やサイボウズ・ラボユースの学生もいたので基的なところから紹介しました。 C/C++コンパイラを使うときはできるだけ警告オプションをつけるのが望ましいです。 警告が出るのは自分のコードの書き方に不備があることが多いからです。 gccやclangでは-Wall -Wextraは基としてそれ以外にも有用なオプションがあります(C++

    C/C++プログラマのための開発ツール - Cybozu Inside Out | サイボウズエンジニアのブログ
  • Pythonの内部構造::PyObject ― CPythonの実装から内部に迫る | POSTD

    こんにちは、皆さん。 Python言語の実装に深く踏み込む前に、Pythonの主要な概念を知っておく必要があります。それは非常にシンプルで、 全てがオブジェクトだ ということです。このことは、Pythonの内部構造を学習する際の最初のステップであり、この旅の入り口でもあります。 今回の主なテーマは、Pythonのオブジェクトが実装レベルでどのように扱われているかを理解することです。私たちは、 Python 2.7.8 のCPythonの実装について話をしていきます。 Pythonのソースをダウンロードし、解凍することを想定しているので、ソースコードへの参照は全て、ルートフォルダからの相対的な参照になります。 PyObjectとPyVarObject Pythonでは全てがオブジェクトです。Pythonで使われている以下のものは文字通り、全て C の PyObject です。 関数 スライス

    Pythonの内部構造::PyObject ― CPythonの実装から内部に迫る | POSTD
  • 投機実行とOut of Orderはつよいというはなし - なるせにっき

    fluentdな人達と話していると定期的にRubyのオブジェクト生成が遅いとdisられます。 質的にしょうがない部分もあるんですが、それにしても遅い部分も結構あるので、おもむろにperf statとperf recordを取ってみましょう。 % sudo perf stat -d ./miniruby -e'GC.disable;i=1000000;while (i-=1)>0;Hash.new;end' Performance counter stats for './miniruby -eGC.disable;i=1000000;while (i-=1)>0;Hash.new;end': 467.629812 task-clock (msec) # 0.993 CPUs utilized 19 context-switches # 0.041 K/sec 2 cpu-migratio

    投機実行とOut of Orderはつよいというはなし - なるせにっき
  • h2o高速化チャレンジ(失敗)記 - Qiita

    きっかけ まず、たまたまこの議論 https://github.com/h2o/h2o/issues/15 を見て「なんか怒ってるなあ」と思ったのが興味を持ったきっかけでした。 この議論のなかでh2oの作者であるOkuさんが「ステートマシンなんかカス」的なことをおっしゃっていて、私の中では「Okuさん=ウィザード」とカテゴライズされているので、「へーそうなんだ」みたいなことを無批判に思ってたのですが、自分の経験上、ステートマシンがだめというよりはテーブルがだめだと思っていて、しばらく脳内に漂わせていた後「そうはいってもなんとかはなるんじゃねえの〜」などと思ったりもしたのですが、そもそもその部分が全体に対してそんなに大きな位置を占めるのかなあとメタな疑問を持ったりして、なんとなくそのまま忘れていました。 しかし最近Okuさんのこのスライド http://www.slideshare.net/

    h2o高速化チャレンジ(失敗)記 - Qiita
    clavier
    clavier 2016/03/04
  • C++11のスレッド、アフィニティ、ハイパースレッディング | POSTD

    背景と導入 何十年もの間、CやC++の標準規格は、マルチスレッディングや並行処理を「その標準の範囲を超えたもの」として扱ってきました。標準規格の目的である”抽象機械”の力が及ばない、”対象依存”という影の世界においてです。メーリングリストやニュースグループの質問には並行処理に関するものが山ほど寄せられましたが、それらにすぐに突き返された回答は「C++はスレッドには関知しません」という何とも冷淡なものでした。この件によって当時のことを思い出す人々は、今後も絶えないでしょう。 しかしC++11の登場で、そんな状況に終止符が打たれたのです。C++標準化委員会は、時代の流れに乗らないと、この先C言語が取り残されてしまうと悟ったのでしょう。彼らはスレッドや同期メカニズム、アトミック操作、メモリモデルなどの存在に、ようやく気付いたわけです。そして標準規格として、C++コンパイラやライブラリのベンダーに

    C++11のスレッド、アフィニティ、ハイパースレッディング | POSTD
  • dlopenで共有ライブラリを使ってみる | IT特殊案件ならBackflip180

    2012-05-14 00:00:00 +0000 dlopenを使って共有ライブラリの関数の呼び出しを紹介します。 共有ライブラリとは 共有ライブラリとは字のごとく、共有で使われるライブラリです。 通常、実行形式のバイナリは共有ライブラリを参照し、共有ライブラリに存在する関数を呼び出したりして実行します。 共有ライブラリの中の関数がいわゆるAPIと呼ばれるものです。 共有ライブラリの仕組がないと、実行形式に必要な全てのコードを含まなくてはならないため、実行形式のサイズは肥大化し、 実行中のメモリ消費量も大きくなってしまいます。 共有ライブラリによってメモリやディスクを節約できるわけです。 また、共有ライブラリが提供する機能はAPIとして外部のプログラムから呼び出すことができます。 今回は共有ライブラリのAPIをdlopenを使って手軽に呼び出す方法を紹介します。 dlopenを使う それ

  • How to C (as of 2016)

    How to C in 2016 This is a draft I wrote in early 2015 and never got around to publishing. Here’s the mostly unpolished version because it wasn’t doing anybody any good sitting in my drafts folder. The simplest change was updating year 2015 to 2016 at publication time. (Update: Many people have submitted revisions, notes, and improvements. All contributions have been incorporated throughout the pa

  • 小崎資広さん「人に依存しないデバッグのために、道具の使い方を知ってほしい」〜RubyKaigi 2015基調講演 2日目 | gihyo.jp

    RubyKaigi 2015レポート 小崎資広さん「人に依存しないデバッグのために、道具の使い方を知ってほしい」〜RubyKaigi 2015基調講演 2日目 12月11日~13日、ベルサール汐留にて「RubyKaigi 2015」が開催されました。今年も基調講演が毎日一つずつ行われました。その模様をレポートします。 RubyKaigi 2015 2日目の基調講演は、世界で唯一の、LinuxのコミッタでありRubyのコミッタでもある小崎資広さんです。今回、小崎さんは「Linux loves Ruby. Ruby Loves Linux - How to debug your linux box」と題して、発表しました。 Linux portメンテナのお仕事 小崎さんは、Ruby Core Teamでの自分の役割を「Linux Portメンテナ」と称し、これまでの仕事の内容を紹介しました。

    小崎資広さん「人に依存しないデバッグのために、道具の使い方を知ってほしい」〜RubyKaigi 2015基調講演 2日目 | gihyo.jp
  • EmscriptenでC言語をJavaScriptに変換する - Qiita

    C言語は使うべきではない言葉なので修正してくださいのクロスプラットフォーム言語だと思っていて、 iOSもObjective-Cの中でC言語が使えるし、 AndroidもNDKでC言語が使えるので、 UI以外のロジックはすべてC言語で書けば、それはすべてのプラットフォームで使えるのではないかと思っていました。 しかし、FireFoxOSでは、それができなくて、基JavaScriptAPIを呼び出すという形になってC言語が使えませんでした。 失意のどん底に陥っていたのですが、 そこの打開策に、Emscriptenがあったのです! !!! Emscriptenとは EmscriptenはC/C++言語からLLVMを生成し、それをJavaScriptに変換するコンパイラのことです。 C言語の標準ライブラリやPOSIXの一部もサポートし、OpenGL ES2.0も使えるそうです。 Emscrip

    EmscriptenでC言語をJavaScriptに変換する - Qiita
  • UNIX/Linux互換OSをゼロから作った話 - Qiita

    こんにちはredcap97です。 私は、UNIX互換OSをゼロから作っています。 ある程度動くようになったので紹介したいと思います。 デモ 現在、QEMUの上で動作するようになっています。CPUはx86ではなくARMを対象に作っています。シェルと基的なコマンドが動作するようになっていて、リダイレクトやパイプも利用できます。 Dockerを使うと簡単にOSを動かすことができます。 概要 33のシステムコールを実装している システムコールはLinuxと互換性がある シェルはDashが利用できる Coreutilsのコマンドが使える libcはmusl libcを使用している ファイルシステムはMinix File Systemを実装している 以上です。 私は実装がとても遅いので、ここまで作るのに2年ぐらいかかっています。 Linusの偉大さを肌で感じなら、これからもノロノロと作っていきたいと

    UNIX/Linux互換OSをゼロから作った話 - Qiita
  • CでMySQLにアクセスする - Qiita

    mysql -uroot create database db_test; use db_test create table tb_test(id int,name varchar(256)); insert into tb_test(id,name) values(1,"aaa"); insert into tb_test(id,name) values(2,"bbb"); insert into tb_test(id,name) values(3,"ccc"); exit #include <stdio.h> #include <stdlib.h> #include <string.h> #include <mysql/mysql.h> int main(void){ MYSQL *conn = NULL; MYSQL_RES *resp = NULL; MYSQL_ROW row;

    CでMySQLにアクセスする - Qiita
  • Python のソースを読んでみる - Qiita

    この話のゴール Python の list, int のデータ構造を理解する CPython のソースに向き合えるようになる(といいな) CPython とは https://en.wikipedia.org/wiki/CPython より CPython is the default, most widely used implementation of the Python programming language. It is written in C. In addition to CPython, there are other "production-quality" Python implementations: Jython, written in Java for the JVM, PyPy, written in RPython and translated into

    Python のソースを読んでみる - Qiita
    clavier
    clavier 2015/09/26
    Python のソースを読んでみる - Qiita
  • やり直しC言語:複雑な宣言の読み方

    C言語は宣言文が非常に読みにくいことで有名で、後発のGo言語はこれを批判して宣言の構文を変えています。私もずっと読むのが苦手だったのですが、私の頭が悪いのではなく、C言語の仕様がヘン、ということらしい。 今まで飽きるほどこの手の解説は書かれてきてるわけですが、自分なりにまとめないと覚えた気がしないので、あえてまとめておきます。ここに書いてある内容は、「C言語ポインタ完全制覇」に詳しく書いてあります。 型の派生 C言語では、int, char, floatなどの基型から、配列やポインタを派生していくことができます。対象を並べたものが配列で、対象を指し示すのがポインタです。 配列やポインタからも配列やポインタを派生できるので、派生パターンは無限に存在します。 int int の配列 int の配列 の配列 ... int へのポインタ int へのポインタ へのポインタ ... int への

    やり直しC言語:複雑な宣言の読み方
    clavier
    clavier 2015/09/23
    やり直しC言語:複雑な宣言の読み方: Architect Note
  • C言語パズル集:Cにまつわる興味深い問題あれこれ | POSTD

    ビジターの皆さんへ C言語に関心を寄せていただきありがとうございます。このページは、C言語の面白い問題、パズルのリストです。これまでに友人たちからeメールで送ってもらったり、で読んだり、インターネットで見つけたり、あるいは自分でC言語でコーディングしていて気づいたりしたプログラムを集めました。 多くのプログラムは、コンパイル、実行され、その振る舞いを示すものです。問題は大まかに次のカテゴリに分けられます。 一般的なタイポエラー。C言語プログラマが頻繁に犯すミスであり、かつ追跡が困難。 初見では非常に理解しがたい小さなプログラム。これらの問題は、他人が書いた優れたコードを読み解く良い訓練になります。 また、全てにGnu/Linux/gccを使っています。掲載順は、それぞれの難易度とは関係ありません。問題解決の助けが必要な場合は、気軽に私に問い合わせてください。連絡先は こちら です。また、

    C言語パズル集:Cにまつわる興味深い問題あれこれ | POSTD
    clavier
    clavier 2015/07/23
    C言語パズル集:Cにまつわる興味深い問題あれこれ | プログラミング | POSTD
  • 別のプロセスにファイルディスクリプタを転送する - Blog by Sadayuki Furuhashi

    UNIXドメインソケット経由でファイルディスクリプタを別のプロセスに渡すことができるらしいと言うことで、試してみました。Manpage of UNIX Manpage of SEND 標準出力を別のプロセスに渡してみます。渡された側のプロセスは、自分の標準入力からの入力を、渡された標準出力に出力しています。 ライブラリ(fdtransport.h): #ifndef FDTRANSPORT_H__ #define FDTRANSPORT_H__ #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <sys/un.h> #include <fcntl.h> #include <string.h> /* UNIXドメインソケットを待ち受ける */ /*

    別のプロセスにファイルディスクリプタを転送する - Blog by Sadayuki Furuhashi