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

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

C

【C】pthreadsのテンプレ

C

スレッド使ったサンプル作るためのテンプレ #include <stdio.h> #include <stdlib.h> #include <pthread.h> void *thread_func(void *param); int main(void) { pthread_t thread; int ret = 0; ret = pthread_create(&thread, NULL, thread_func, NULL); if (ret != 0) { // pthread_creat</pthread.h></stdlib.h></stdio.h>…

【Make】特殊変数メモ

C

$@ : ターゲットファイル名 $% : ターゲットがアーカイブメンバだったときのターゲットメンバ名 $< : 最初の依存するファイルの名前 $? : ターゲットより新しいすべての依存するファイル名 $^ : すべての依存するファイルの名前 $+ : Makefileと同じ順番の依…

【C】glibcとmusl libcの微妙な違いメモ

C

printfの挙動 EOFの扱い readとwriteについて stdioの実装にreadvとwritevを使用している シグナルマスクとsetjmp/longjmp 正規表現 exitが複数回呼ばれるときの振る舞い Dynamic linkerにおけるlazy bindingの未サポート dlclose はmuslでは何もしない スレ…

【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>…