たつをの ChangeLog : 2001-07-12

「里程標」りていひょう。要するにマイルストーン。

ReadOnly

2001-07-12-2
Windows にて、あるフォルダ以下全てのファイルの読み取り
専用属性を解除したい。いつも使ってる Linux (zsh) なら、
"chmod +w **/*" で済むんだけど、Windows ではどうやるのだろうか?
考えるのも面倒なので、適当に検索したら、以下のツールを見つけた。イ
ンストールして、目的を達成した。
- 階層下読み取り専用属性設定ツール
  http://www.vector.co.jp/soft/dl/win95/util/s0159281.html

こんなことで良いのだろうか。なんか間違ってるような気がする。
Windows だから仕方ないのか? もっと簡単な方法はないのか?

とあるCプログラムがある。構造体のメンバをポインタ+オフセットで扱っ
ている。メンバ間のパディングは 0 バイトであると仮定している。この
ようなプログラムを、現状(パディング 0) を維持したまま gcc (Linux)
でコンパイルするにはどうしたらよいのだろうか?

マニュアル、info、Web を調べた結果、gcc で構造体のパディングを制御
する方法は、"__atrribute__" を用いる方法と "#pragma" を用いる方法
があることが分かった (コマンドラインオプションでなんとかする方法が
あればいいんだけどなあ)。以下にサンプルを示す。

サンプルプログラム
struct aa { char a; int b; };
struct bb { char a; int b __attribute__((packed)); };
#pragma pack(1)
struct cc { char a; int b; };
int main(int argc, char *argv[]) {
  printf("%d %d %d\n",
    sizeof(struct aa), sizeof(struct bb), sizeof(struct cc));
}
出力結果
% gcc test.c
% a.out
8 5 5
もちろん、構造体の扱いを改めるのが正しい解決方法であることは分かっ
ている。しかし、常に正しい解決方法が求められているとは限らないのだ。
それが人生だ。はがゆいものである。

アライメントの問題に関してはこちらを参照。
http://www.kab-studio.com/Programing/Dictionary/Words.html#Alignment

([2001-07-13] により適切な解あり)
この記事に言及しているこのブログ内の記事

たつをの ChangeLog
Powered by chalow