C言語プログラミング

32bitのpopen()やsystem()は64bitのiノード番号を扱うことが出来ない

※2013年6月24日、Ubuntu 13.04では修正されていることを確認。 前回C#で書いたツールをJavaで書き直したのを参考に、今度はCで書き直して実行してみたところ、やっぱり何もせずに終了してしまったので、何がいけなかったのか調べてみたところ、popen関数で実…

jFD2の関連付けと外部コマンドのバグを何とかしてみた

※2012年10月18日、更新。 jFD2をLinuxで動かす場合、ファイル名/フォルダ名にシェルの特殊文字が使われていると、関連付けられたアプリで開けなかったり外部コマンドに渡せなかったりする、とんでもなく致命的なバグがあるのだが、いつか直るだろうと思って…

fallocate() と ftruncate() の違いについて

※2013年2月13日、ちょっと書き直し。 以前、MongoDBをext3で使ったら死んだというページとはてブを見て、fallocateってまだまだ知られてないんだなぁと思ったので、周知のために色々書いてみることにした。fallocateって何?ファイルにデータを書き込む前に…

readの正しい使い方、writeの正しい使い方

※2012年5月2日、追記。下記のコードよりもcopybenchのコードを参考にした方がいいかもしれない。 C言語: write(2)の正しい使い方というページがあったのだが、今は見ることが出来なくなっているので、似たような内容を残しておくことにした。正しい使い方と…

fake-defrag-ext4 0.0.18 公開

ダウンロード久しぶりにfake-defragのコードをぼーっと眺めていたら、とんでもなく初歩的なバグを見つけた。 else if(argc == 2) { char *tmp = argv[1]; if( ((tmp[0] == '-') && (tmp[1] == 'h')) || ( (tmp[0] == '-') && (tmp[1] == 'h') && (tmp[2] == …

g_path_get_dirname()の使用上の注意

GLibにg_path_get_dirnameという、引数として与えたファイルパス(文字列)から親フォルダ部分を抽出して返す、という動きをする関数がある。例えば、/home/testという文字列を渡すと/homeを返し、testを渡すと.が返ってくるのだが、実はこの関数、パス区切…

C言語の配列とか添え字演算子とかポインタとか

どうもポインタの理解が甘いので復習してみたが、訳が分からない。ポインタのポインタ(ダブルポインタ)とかポインタのポインタのポインタ(トリプルポインタ)とかイミフ。以下、ソースコード。 #include <stdio.h> #include <stdlib.h> typedef struct aa { char c; struct a</stdlib.h></stdio.h>…

Linux用デフラグツール『fake-defrag 0.0.2』公開

fake-defragは簡易デフラグツールです。ext4用のデフラグツール(e4defrag)が安心して使えるようになるまでの繋ぎとして作成してみました。Ubuntu 11.04 、 Ubuntu 11.10 (32bit)で使用することを想定しています。ダウンロード 使い方1fake-defrag 対象のフ…

snowcp 0.10.3 beta版 公開

ついでにsnowcp_0.10.7-beta-src.tgzまで公開。

Ubuntu 11.04でファイルをコピーする際に、断片化を出来るだけ抑えるにはどうしたらいいのか探ってみた

結論。ファイルシステムがext4・XFSならfallocateを使え、ntfsならftruncateを使え、他は知らん。Windows用ソフトのFastCopyは、SetFilePointer() + SetEndOfFile() で連続領域を確保することでファイルの断片化を防止していると知って、snowcpでもいくつか…

C言語でファイルをコピーする(マルチスレッド&ダイレクトI/O編)

※2012年8月9日、追記。普通のファイルコピーのソースが見たい場合はcopybenchのソースが参考になると思う。このページの内容はやや古くなっているうえ、ソースコードの質が低いので注意。そこに至る経緯。 mmapが速いらしいと知ってググる。 ファイルコピー…

C言語を独学で習得するのに適した入門書を探してまとめてみた件について

※2017年11月8日、「やさしいC 第5版」「かんたん C言語」「ふつうのLinuxプログラミング」「C言語による スーパーLinuxプログラミング」「モダンC言語プログラミング」のリンクを修正。Amazonで評判が良い本を、発売日順に並べてみた。 入門書 脱 初心者 ア…

C言語でフォルダ(ディレクトリ)を丸ごとコピーする

※2012年10月1日、Ubuntu 12.10でコンパイルできるように修正。※より複雑なコードを見たい場合はsnowcpのソースを見てやって下さい。 Linuxで動作する良さ気なサンプルコードを見つけられなかったので自分で書いてみた。実用性は皆無。コンパイルにはGLibが必…