地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

C

【C】マクロ

C

拝啓 カーネルソース読んでるとよく出てくる「do {} while (0);」 これが何なのか気になったので調べてみました。 torvalds/linux 以下swap関数のようなイメージ 至るところでdo {} while(0)が存在 /** * swap - swap values of @a and @b * @a: first value…

【C】IPC メッセージキューのサンプル実装

C

メッセージはプロセス間でデータをストリーム的にやりとりすることが可能で、FIFOやパイプに似ていますが、メモリ上で行なわれるのでより高速です。サンプルを実装してみたのでメモ

【C】基本的な話

C

他の人が書いた C 言語のプログラムを見ながら思ったのだが、 strcat や strcmp で文字列を切り貼りするのは止めて、 printf はフォーマット文字列をちゃんと使おう。 右寄せ・左寄せ・インデントが必要な場合でも、 1行を表示するのは1回の printf 呼び出し…

【C】スタック使用量を出力する

C

perlアプリケーションの負荷テストをやっていて関数ごとのメモリ使用量とかみたいけどどうやって出すんだ。Cなら分かるのにって場面があった。Cなら分かるって思ったはいいもののそういえばどうやって出すんだろって思ってサンプル見ながら実装してみた。 ラ…

【C】signalfd + epoll のサンプル

typedef enum { MYOP_ERROR = -1, MYOP_NONE = 0, MYOP_QUIT, MYOP_WAITCHILD, /* snip */ } MyOperation_t; /** * AnalyseEvent - epoll_eventから任意のコマンドIDを導く */ MyOperation_t AnalyseEvent (struct epoll_event *event) { if (event->data.fd…

【C】構造体ポインタ

C

#include <stdio.h> #define NAME_LENGTH 50 typedef struct { char name[NAME_LENGTH]; int age; char gender; } Person; void PrintPerson(Person *p) { printf("name: %s\n", p->name); printf("age: %d\n", p->age); printf("gender: %d\n", p->gender); } int ma</stdio.h>…

【C】pread(2)/pwrite(2)

C

指定したオフセットでファイルディスクリプターを読み書きするpread(2)/pwrite(2)を使ったサンプルコード #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_R</assert.h></sys/types.h></sys/stat.h></fcntl.h></unistd.h></stdio.h>…

【C】pread(2)/pwrite(2)

C

指定したオフセットでファイルディスクリプターを読み書きするpread(2)/pwrite(2)を使ったサンプルコード #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_R</assert.h></sys/types.h></sys/stat.h></fcntl.h></unistd.h></stdio.h>…