0

open私はand関数で遊んでいたmakeので、コードは次のようになるファイルに1024バイトを書き込もうとしました:

#include <stdio.h>
#include <stdlib.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

main(void)
{
        int fd;
        fd = open("hellow" , O_RDWR);
        write(fd , "hello" , 1024);
}

これをコンパイルするlinuxと正常にコンパイルされますが、を使用してターミナルでgcc開こうとすると、次の警告が表示 されます。 「はい」と答えると、ランダムなシンボルの完全なページが続く、書くつもりの行が表示されます。だから私の質問は、バイナリファイルと見なされる原因と、意図した行の後にそれらのランダムな文字が書き込まれる理由を知っている人はいますか?hellowless"hellow" may be a binary file. See it anyway?hellow

4

1 に答える 1

6

これらのランダムな文字が意図した行の後に書き込まれるのはなぜですか?

1024 バイトを書き込むように指示write()しましたが、6 ("hello" と末尾のゼロ) しか指定しなかったため、(ほとんどの場合) 1018 バイトのランダムな意味不明な内容をファイルに書き込んでしまいました。それだけでなく、これは未定義の動作を引き起こします。

hellowバイナリファイルと見なされる原因は何ですか?

lessファイルが「テキスト」か「バイナリ」かを判断するためにヒューリスティックを使用しています。通常の人間が読める範囲外の値を持つ文字を探しています。詳細については、man ページを参照してください(文字セットのセクションを参照してください)。

于 2013-09-16T22:02:55.817 に答える