C/C++

GNU readlineを使ってみる

作成中のftpクライアントでユーザからコマンド入力を行う部分を作っています.scanfやgetsを使用すればいい話なのですが,どうせ作るならbashライクな入力インタフェースを作りたいと考えました.Ctrl+rで履歴の検索を行ったりするアレです.しかし,もう既…

時間の処理でで大ハマり

「Unix/Linux 理論と実践」を参考にしてwhoコマンドのオリジナル版を作っている途中で、time_t型で表現された時刻から年、月、日、時間、分を取り出す必要が出てきました。man ctimeによると次の関数を使うことでやりたい処理が実現できそうでした。 struct …

swapマクロについて

2つの変数の値を入れ替える為には一時的な変数を用意する必要があると思っていました。よくあるc = a, a = b, b = cという文です。しかし、次のような方法でも交換できることを知りました。 #define SWAP(a,b) (a += b, b = a - b, a -= b)

キャストで新しく知ったこと

キャストって連続して行えるんですね,知りませんでした.以下のコードはコンパイルして実行できます. #include <stdio.h> int main() { int a = (int)(double)(int)(double)(int)(double)(int)(double)(int)(double)100; printf("%d\n", a); }</stdio.h>

クラスの相互参照について

あるプログラムを作っていて,クラス同士がお互いを参照し合う場合にコンパイルできないという状況になってしまいました.以下がそのサンプルソースです. // main.c class A { B a_instance; }; class B { A b_instance; }; int main() { return 0; }たしか…

getservbynameの使い方

サンプルソース (getservbyname_sample.c) #include <stdio.h> #include <netdb.h> /* getservbyname() */ int main(int argc, char **argv) { struct servent *n; if(argc == 1) { printf("usage: %s protocol_name\n", argv[0]); return 1; } if((n = getservbyname(argv[1],</netdb.h></stdio.h>…

財産分け問題を解く

日経ソフトウェアに財産分け問題という問題が掲載されていたので解いてみた。以下、ソースです。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ncurses.h> #include <unistd.h> void print_map(char data[][12]) { int i; for(i = 1; i < 11; i++) { mvprintw(i, 0, "%s\n", &data[i]</unistd.h></ncurses.h></string.h></stdlib.h></stdio.h>…

sleep関数について

sleep usleep nanosleep いろいろあるんだ。

Ubuntu 7.10でncursesを使ってみる

CUIプログラムを作っていてふと画面の制御がしたくなったので、ncursesを使ってみることにした。まずはapt-getでlibncurses5-devをインストールする。 $ sudo apt-get install libncurses5-dev これで準備は完了。次のサイト様にあったサンプルコードをsampl…