mokky14's IT diary

IT関係の仕事メモ、勉強会の感想など書いてます。

C言語

gdbでリモートデバッグ

コンパイルしたマシンと別のマシンで動作しているプログラムをgdbデバッグする方法のメモ。 プログラムを動かすサーバにgdbserverをインストールする。インストールはyumから出来る。 # yum install gdb-gdbserver 接続を受け付けるIPアドレスとポートを引数…

libmemcachedを使用したmemcachedへのアクセス(get)

libmemcachedライブラリを使用してmemcachedにアクセスするサンプルを作ったのでメモ。 準備 libmemcachedとlibmemcached-develをyumでインスト。 インストしたライブラリのバージョンは以下。 ===========================================================…

cutterを使ってみた(けど動かなかった) (Solaris(x64)、Sun Studio12)

Solaris(x64)、Sun Studio12環境でcutterを動かしてみたのでそのメモ。 インストはこちら。cutterは、テストコードとテスト対象コードのオブジェクトを共有ライブラリに固めて、その共有ファイルを対象に試験する。サンプルとしてこんなコードを用意。 テス…

Solaris10(x64)にcutterをインストール

C言語でTDDやってみようと、cUnitインストしようとしてググってたら、cutterというソフトの方がcUnitよりもよいという記事があった。 内容を軽く見てみても、mainから実装しなければならないcUnitに対して、テストケースをsoファイルとしてリンクするcutter…

Pro*Cのプリコンパイルでstddef.hが見つからないエラー発生

Pro*Cのプリコンパイル作業してたら、ヘッダが見つからないというエラーが出たのでその対処内容残しとく。 PCC-F-02102, Fatal error while doing C preprocessing Error at line 30, column 10 in file /usr/include/sched.h 30 #include <stddef.h> 30 .........1 30</stddef.h>…

PCC-S-02322エラー

SolarisからLinuxへのC言語のソースをポーティングする作業してたら、見慣れないエラーに当たったので、その対処を。 PCC-S-02322, found undefined identifier 元々Solaris上でコンパイル出来てたソースなので、「未定義の識別子」なんてあるはずない。 実…

C言語でLinux、Solaris向け処理を#ifdefで分岐

Solarisで作ったアプリをLinuxにポーティングするため、Solaris、Linux固有の処理を#ifdefで分けて記載する必要があって、#ifdefの識別子が何だったか分からなくて調べたので、メモ残しとく。とりあえずこんなソースを用意。 #include <stdio.h> int main() { puts("-</stdio.h>…

ロックなしでカウンタをインクリメント(atomic_inc_*関数)

memcachedのソース見てたら気になる処理あったのでメモ。以下は、memcached(見たバージョンは1.4.15)の中のthread.cの関数。 unsigned short refcount_incr(unsigned short *refcount) { #ifdef HAVE_GCC_ATOMICS return __sync_add_and_fetch(refcount, 1);…

C言語での定周期処理の実装(timer_settime使用版)

setitimerが廃止予定関数ということだったので、timer_settime関数を使用した定周期処理も作ってみた。 前のソースを改造して作成。 #include <stdio.h> #include <string.h> #include <unistd.h> #include <time.h> #include <sys/time.h> #include <signal.h> #include <pthread.h> #include <errno.h> int main() { // setitimerにより通知</errno.h></pthread.h></signal.h></sys/time.h></time.h></unistd.h></string.h></stdio.h>…

C言語での定周期処理の実装(setitimer)

シグナルについて調べてたら、定周期でイベント通知するAPI見つけたのでメモ。 今までC言語で定周期処理を実装するのに、処理終わった後でsleepするようなプログラム組んでたけど、こっちの方が楽そう。以下、試したサンプル。 シグナルハンドラは嫌いなので…

複数スレッドで同時に同一のコンテキストを使用してみた

Pro*Cのアプリケーションで、複数のスレッドから同時に同一のコンテキストを使用してSQLを発行するようなプログラム動かしたらどうなるか確認してみた。 プログラムはPro*Cで作成。 結果、 SQL実行時にエラーが発生した。 エラー発生時のsqlca.sqlerrm.sqler…

C言語でmainのargvを書き換えると

Cソースのレビュー中に「main関数のargvの値を書き換えたらまずいのか?」という議論があったので少し調べてみたら、psで表示されるプロセス名が変わるということが分かった。 参考にしたのは以下のページ http://slashdot.jp/journal/443359/argv%5B0%5D%E3…

C、C++ソース混在環境でのsqlcxtリンクエラー対処

Pro*Cを使ったソースのリンクで undefined reference to `sqlcxt(void**, unsigned int*, sqlexd*, sqlcxp const*)' というエラーでハマったのでメモ残しておく。 結論から書くと、今回コンパイルしようとしていたソースはC、C++ソース混在で、その場合はpro…