【问题标题】:How to using write() system call write an integer in to file如何使用 write() 系统调用将整数写入文件
【发布时间】:2019-11-27 15:53:49
【问题描述】:

如何使用 write() 系统调用将整数写入文件

 //write(fd,buffer,strlen(buffer));
 //The buffer in the write() system call has to be an char[]; 
 //if i want to write integer such as 

for(int i = 0, i < 10; i++){

    write(fd,i.??); // error 
    // How can i write the integer in to the file by using the write() system call
}

【问题讨论】:

  • write(fd, &amp;i, sizeof i);
  • 这将写入适合write使用的二进制值。如果您想要文本表示,请使用fprintf

标签: c filesystems buffer system-calls


【解决方案1】:

如果你想要二进制输出:

 write(fd, &i, sizeof(i));

如果要文本输出,每行一个十进制数:

char tmpbuf[50];
int n = sprintf(tmpbuf, "%d\n", i);
write(fd, tmpbuf, n);

如果你想要文本输出,每个 int 8 个十六进制数字:

char tmpbuf[20];
int n = sprintf(tmpbuf, "%08X", i);
write(fd, tmpbuf, n);

如果您不确定要使用哪种方法,请尝试所有三种方法,然后查看生成的输出文件。 (如果没有“十六进制转储”程序或二进制编辑器,“二进制”输出不会很容易看到。)

【讨论】:

    【解决方案2】:

    可以先使用sprintf()函数创建字符串,然后在write()中使用如:

    char number_s[2];
    sprintf(number_s,"%2d",i);
    write(fd,number_s,strlen(number_s));
    

    【讨论】:

    • 很遗憾这会溢出number_s。不要忘记字符串终止符,否则%2d 并不能保证只写入 2 位数字。
    • @WeatherVane %2s 不会将输出限制为两个字符。
    • @thangpx1706 不清楚 OP 想要一个字符串。 (也许,也许不是)。另外,[2] waayy 太小了。
    • @Steve 这只是一个例子,因为在他的问题中,i 变量仅在010 的范围内,我认为 2 就足够了。
    • char number_s[2]; 和普通的 %d 将适用于个位数的数字。 %2d 保证任何数字都会溢出。 OP的例子只是一个例子;对于更大的输入,一个强大的解决方案将毫无怨言地工作。将像 number_s 这样的数组大小调整到几乎没有人们认为它们需要的大小是错误的、毫无意义的经济。
    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2015-03-31
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    相关资源
    最近更新 更多