ログイン
編集不可のページディスカッション情報添付ファイル
clear/note/2012-06

MMA

2012年6月

06/02

GTK+2.0でウィンドウを出すだけの何か

チュートリアルを見つつ。

   1 #include <gtk/gtk.h>
   2 
   3 int main(int argc, char *argv[])
   4 {
   5     GtkWidget *window;
   6 
   7     gtk_init(&argc, &argv);
   8 
   9     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  10     g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
  11 
  12     gtk_widget_show(window);
  13 
  14     gtk_main();
  15 
  16     return 0;
  17 }

コンパイルは、ソースがwidget.cなら

gcc -o widget widget.c `pkg-config --cflags --libs gtk+-2.0`

06/06

06/08

stdioのバッファリングを眺める

Cのstdioはバッファリングされているんだよー、ということを目で見て分かるように簡単な例で示すのが目標。とりあえず標準出力。

普通に書こうとすると、端末側が入力を行単位で扱う(故にstdinのバッファリングを切るだけではダメ)ので一体どのタイミングでプログラムに入力が渡されるのかが分かりづらいのと、エコーバックがあるために入力と出力が混在して見づらいのとで、ぱっと見てもさっぱり分からない。そこで、

加えて、デフォルトのBUFSIZ(手元のstdio.hでは1024だった)は大きすぎてバッファがあふれた時の挙動を観察しづらいので、setbuffer()でわざと小さなバッファを設定する。

   1 #include <stdio.h>
   2 #include <curses.h>
   3 
   4 int main(void)
   5 {
   6     int c;
   7     char buf[8];
   8 
   9     initscr();
  10     cbreak();
  11     noecho();
  12 
  13 #ifdef NBUF
  14     /* disable buffering for stdout */
  15     setbuf(stdout, NULL);
  16 #else
  17     /* set tiny buffer for stdout */
  18     setbuffer(stdout, buf, 8);
  19 #endif
  20 
  21     while ((c = getch()) != ERR)
  22         putchar(toupper(c));
  23 
  24     return 0;
  25 }

cursesを使うのでコンパイル時には-lcursesが必要。-DNBUFをつけたりつけなかったりでコンパイルして挙動を眺める。

追記: 今回のような目的ならcursesよりもtermiosを使った方が良さそう。

06/16

sshホスト鍵の指紋を表示

忘れる度に調べるのでメモ。

ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub # rsa
ssh-keygen -lf /etc/ssh/ssh_host_dsa_key.pub # dsa

06/20

06/23

clear/note/2012-06 (最終更新日時 2012-06-23 15:10:27 更新者 clear)