0があること、何も無いこと
前回nullデバイスは0を返しているのでは? と書きましたがややこしいことになりました。
nullデバイスと似たようなものに/dev/zeroがあります。
まずは以下のCコードを見てください。
--------------
#include <stdio.h>
int main(){
int a = 7,b = 9;
FILE *zero;
FILE *null;
zero = fopen("/dev/zero","r");
null = fopen("/dev/null","r");
printf("a=%d\n",a);
printf("b=%d\n",b);
a = fgetc(zero);
b = fgetc(null);
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
--------------
aとbに適当な整数を入れて/dev/zeroと/dev/nullから一文字読み込んで表示しています。
さて実行結果はどうなると思いますか?
こうなりました。
--------------
a=7
b=9
-1
--------------
まずaとbに数が入っていることを確かめます。
そしてFILE構造体で/dev/zeroと/dev/zeroを開きます。
Linuxでは全てがファイルなのでこういうふうにデバイスを開くことができます。
そして2つのデバイスファイルから一文字読み込んで表示……
aは/dev/zeroを開いているので0が返ってきます。
bは……なんででしょう? -1を返してきました。
Cでは0以外はすべて真と判定されるのでif文に入れるときは注意が必要なようですね。
謎は深まる……