O_CREAT、O_TRUNC、O_WRONLYはどうして512、1024、1になる?何進数表示?
Win2k+cygwinの環境です。
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
int main(void){
int c,i,t,w;
c=O_CREAT,t=O_TRUNC,w=O_WRONLY;
i=(O_WRONLY | O_CREAT | O_TRUNC);
printf("c=%d,t=%d,w=%d,i=%d\n",c,t,w,i);
return 0;
}
を実行すると
$ ./test
c=512,t=1024,w=1,i=1537
となりました。
/cygwin/usr/include/bits/fcntl.hには
#define O_ACCMODE 0003
#define O_RDONLY 00
#define O_WRONLY 01
#define O_RDWR 02
#define O_CREAT 0100 /* not fcntl */
#define O_EXCL 0200 /* not fcntl */
#define O_NOCTTY 0400 /* not fcntl */
#define O_TRUNC 01000 /* not fcntl */
#define O_APPEND 02000
#define O_NONBLOCK 04000
#define O_NDELAY O_NONBLOCK
#define O_SYNC 010000
#define O_FSYNC O_SYNC
#define O_ASYNC 020000
#ifdef __USE_GNU
# define O_DIRECT 040000 /* Direct disk access. */
# define O_DIRECTORY 0200000 /* Must be a directory. */
# define O_NOFOLLOW 0400000 /* Do not follow links. */
となっていまして、どうして
c=512,t=1024,w=1,i=1537
になるのか分かりません。8進数表になっているのかと推測して
#define O_CREAT 0100
よりこれは
Ox0100
(8進数表示での0100)の意味なので10進数表示に変換してみましたら
64
となって辻褄が合いません。
#define O_TRUNC 01000
に於いても
Ox01000→512
#define O_WRONLY 01
に於いては
Ox01→1
でこれだけは実行結果と一致しています。
どうして
c=512,t=1024,w=1,i=1537
となるのでしょうか?
お礼
たぶん僕いわれてますね(苦笑)結構僕、女性ウケがいいみたいで(^^;)いつも女の子から話かけてくれます(*^^*)正直なところ男は女の子に飢えていて嫌いです(怒)可愛い子いないかな~とか人を容姿で判断するなよ!と心でいつもおもっています。僕は話していて『いいなぁ~』と思う人を探したいですね(*^^*)男は人を外見で判断し過ぎです。同じ男なのが時々嫌になります。男女ともども気が合う人見つけたいですね(^^;)といっても男子10人ですから難しいかもです。