コアダンプの数だけ強くなれるよ

見習いエンジニアの備忘log

Linux

Windows-Linux間をTCPで通信する

TCPを使ってWindowsとLinux間で通信してみる。 具体的にはWindows上にVirtualboxで仮想マシンを作成しHost-Only-Adapter経由で通信する。 構成 サーバ : Linux CentOS 6, X86_64(64bit) on Virtualbox クライアント : Windows7 (32bit) プログラム作成 クラ…

Qt5で始めるGUIプログラミング

Qt5を使ってGUIプログラミングに挑戦してみる。 まずはウィンドウを出すだけ。Linuxサーバでアプリケーションを作成&実行し、表示はWindowsで行うスタイル。 実行環境 ホスト側 Windows7 32bit Xming 6.9.0.31 Teraterm 4.9.2 サーバ側(実行側) CentOS 6, x…

シグナル受信をepollで監視

Linuxのsignalfdを使ってシグナルをepollで監視する。 signalfd.c #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <sys/epoll.h> #include <sys/signalfd.h> #include <errno.h> #define MAX_EVENTS 10 #define RET_OK (0) #define RET_NG (-1) #d…</errno.h></sys/signalfd.h></sys/epoll.h></sys/socket.h></unistd.h></string.h></signal.h></stdlib.h></stdio.h>

TAILQでリスト管理

TAILQを使ってリストを実現する。 詳細はMan page of QUEUE参照。 tail.c #include <stdio.h> #include <stdlib.h> #include <sys/queue.h> typedef struct memEntry { TAILQ_ENTRY(memEntry) entry; int32_t size; void* ptr; } memEntry_t; typedef struct { TAILQ_HEAD(tq_head, memEntry)</sys/queue.h></stdlib.h></stdio.h>…

ソケットプログラミング(UDP)

LinuxでUDPによる通信を行うサンプルプログラム。この手の例はGoogle先生で検索すれば沢山でてくるけど、システムコールのリターン値を見てなかったり、openに対応するcloseをしていない例が多いことに気付くと思う。もちろん動かすことだけ考えたら気にする…

Linuxでシグナル捕捉

使い方をすぐに忘れるsigactionでシグナルを捕捉する方法。 #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <signal.h> #include <errno.h> #include <string.h> #include <unistd.h> static volatile sig_atomic_t RecvSigno = 0; void signal_handler(int signo) { RecvSigno = signo; } int main(void) </unistd.h></string.h></errno.h></signal.h></stdint.h></stdlib.h></stdio.h>…

X11で始めるGUIプログラミング

いまどきX11でプログラム書くことがあるかは知らないけど、 凄い昔にLinuxでGUIのプログラミングにトライしたときのサンプルコードを見つけたので掲載。 現代はQtとか使うのかな。事前準備 $ sudo yum -y install libX11* x11.c #include <X11/Xlib.h> #include <X11/Xutil.h> #includ</x11/xutil.h></x11/xlib.h>…

最低限あると嬉しいvimrc

大抵もっとごちゃごちゃ書いてあるけど、個人的に最低限あると嬉しいvimrcの設定だけをピックアップ。 $cat ~/.vimrc syntax on "色設定 colorscheme desert "前回編集終了位置からの再開 augroup vimrcExtend au BufReadPost * if line("'\"") > 1 && line(…

コードの処理速度計測にgprofを試してみた

GNUのプロファイラ gprofでコードの処理速度計測を試してみた。 関数単位、LINE(行)単位での実行速度の計測ができる模様。今回は関数単位でお試し。使い方は"-pg"のオプションを付与してコンパイルしたバイナリを実行後にgprofコマンドをかませばOK。gprofte…

linuxでkbhit()

LinuxでWindowsのkbhit()相当を実装する。kbhit.h #ifndef _KBHIT_H_ #define _KBHIT_H_ #include <stdbool.h> #include <termios.h> #include <unistd.h> extern void KB_open(void); extern void KB_close(void); extern bool kbhit(void); extern char linux_getch(void); #endif /* _KBHI</unistd.h></termios.h></stdbool.h>…

C言語でbuffer overrun

お呼びでない関数を実行する。overrun.c #include <stdio.h> #include <stdlib.h> void goast(void) { printf("Boo!\n"); } void dummy(void) { char a[1] = {0}; a[9] = &goast; } int main(void) { dummy(); return 0; } 実行例 $ gcc overrun.c overrun.c: In function 'dumm</stdlib.h></stdio.h>…

gnuplotで正規分布を表示

gnuplotで正規分布のグラフをterminal上に表示する。環境はLinux(CentOS 6)[手順] perlで正規分布に従う乱数のリストをファイルに出力 gnuplotでterminalにグラフ出力 事前準備(perl, gnulpotのinstall) $ sudo yum -y install gnuplot $ sudo yum -y instal…

find, sedで一括置換

カレントディレクトリ配下で検索したファイルについて内容を指定条件に従い置換する。実行例 $ find . -name "<search conditions>"|xargs sed -e s/'<before>'/'<after>'/g -i</after></before></search>

errno一覧

Linuxでerrno一覧 #include <stdio.h> #include <string.h> #include <errno.h> int main(void) { for(int i = 0; i <= EHWPOISON; i++) { char str[64] = {0}; strerror_r(i, str, sizeof(str)); printf("%d:%s\n", i, str); } return 0; } 実行結果 0:Success 1:Operation not permitte</errno.h></string.h></stdio.h>…

C言語で簡易メモリ管理

Linux Kernelのリスト構造を参考に作成。環境:CentOS 6, gcc version 4.4.7mempool.h #ifndef _MEMPOOL_H_ #define _MEMPOOL_H_ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <stdint.h> #include <stddef.h> #define EASY_ELECTORIC_FENCE (0x123456789) #define list_for</stddef.h></stdint.h></unistd.h></string.h></stdlib.h></stdio.h>…