在C写填充十六进制中使用系统调用

时间:2015-02-05 20:54:54

标签: c linux system-calls

嘿所以我对C本身很新,并且在C中使用系统调用非常新,但是我必须将它用于作业,所以我试图练习读取和写入文件。读取工作正常,但由于某种原因,写入做了奇怪的事情。它写入文件的某种填充十六进制表示我要写入文件的数字。任何帮助将不胜感激!!

buffer= 10;
if (write(file, &buffer,sizeof(int)) < sizeof(int)) {
    printf("Error in writing\n");
    exit(EXIT_FAILURE);
}

当我运行它时,它将它放在文件中,但当我打印出数字本身时,它打印正确的数字

  

0a00 0000

3 个答案:

答案 0 :(得分:2)

sizeof(int)是4个字节(显然在你的环境中),它是32位的,可以用8个十六进制数字表示,这就是你在文件中看到的。

您显然位于Little Endian计算机上,因此首先写入最不重要的字节。在大端机器上,你会在文件中看到0000 000a。

答案 1 :(得分:0)

sizeof(int)是32位,所以4个字节。这意味着4组两个十六进制值。那有意义吗?所以它应该填充它,因为你写的是4个字节。

答案 2 :(得分:0)

使用snprintf

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main()
{
    int file = creat("afile.txt",S_IRWXU);
    int buffer= 10;
    char sbuffer[10];
    snprintf(sbuffer,sizeof(sbuffer),"%d",buffer);
    if (write(file, &sbuffer,strlen(sbuffer)) < strlen(sbuffer)) {
        printf("Error in writing\n");
        exit(EXIT_FAILURE);
    }
    close(file);
}