【问题标题】:C - How print an integer with system call? [duplicate]C - 如何使用系统调用打印整数? [复制]
【发布时间】:2018-06-08 09:02:45
【问题描述】:

对于我的项目,我必须在不使用函数库的情况下打印一个整数值(例如itoasprintfprintf、fprintf、fwrite 等...),但我只能使用系统调用@ 987654325@

【问题讨论】:

  • 请在提问时向我们展示您的努力。你有什么尝试准备十进制表示并打印它?
  • 挑剔但write() 仍然是库函数调用而不是系统调用。
  • @AjayBrahmakshatriya 现在这真的吹毛求疵!根据该定义,C 中没有系统调用;它们仅供汇编语言程序员使用。
  • @SteveSummit 我同意。也许sys_call 可以有不同的想法。但是,是的,我太从字面上理解了。

标签: c printing int system-calls


【解决方案1】:

您想在不使用库函数(如 printffwrite)的情况下打印整数。您可以使用write() 系统调用。打开write 的手册页。它说

write() 将缓冲区中的 count 个字节从 buf 开始写入到 文件描述符 fd 引用的文件。

ssize_t write(int fd, const void *buf, size_tcount);

例如

int num = 1234;
write(STDOUT_FILENO,&num,sizeof(num));

或者

write(1,&num,sizeof(num)); /* stdout --> 1  */

write() 以上系统调用会将num 写入stdout 流。

编辑:- 如果您的输入是 integer 并且您想将其转换为字符串并打印它,但不想使用库函数,如 itoa()sprintf() & printf()。为此,您需要实现用户定义sprintf() & 然后使用write()

int main(void) {
        int  num = 1234; 
        /* its an integer, you need to convert the given integer into
        string first, but you can't use sprintf()
        so impliment your own look like sprintf() */

        /*let say you have implimented itoa() or sprintf()
        and new_arr containg string 1234 i,e "1234"*/

        /* now write new_arr into stdout by calling write() system call */  
        write(1,new_arr,strlen(new_arr)+1);
        return 0;
}

【讨论】:

  • 我很确定任务是将数字打印为 100 作为 3 字符字符串 100,而不是二进制字节 0x00 0x64 或类似的。
  • 我之前误会了。谢谢@SteveSummit 我修改了我的答案。
  • 我已经撤消了我的反对票。不过,我会注意到,(a)你帮助用户 Marco 作弊,为他做功课,(b)答案归结为编写 itoa 函数,这本身就是一个标准练习,并且可以更直接地编写。 (您可能需要进行网络搜索以查看一些内容。)
  • 我明白@SteveSummit 我现在会小心的。
猜你喜欢
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多