【问题标题】:Syscall alternative for printf()? [closed]printf() 的系统调用替代方案? [关闭]
【发布时间】:2020-06-05 08:21:06
【问题描述】:

我想知道 printf() 函数的系统调用替代方案是什么? 例如,一个完全执行以下操作的函数?

char message[256] = "Hello";
printf("Message is : %s\n", message);

我尝试过 write(),但它不需要格式说明符。

【问题讨论】:

  • 如果已经有一个方便的系统调用来做同样的事情,为什么有人会写printf
  • 这听起来像是 XY 问题。你到底想达到什么目的?
  • 您必须使用write 来实现格式说明符。看看我的printf的源码就知道了:github.com/JL2210/minilibc/blob/master/src/stdio/vfprintf.c或者你也可以看看musl(不过只是学习有点复杂):git.musl-libc.org/cgit/musl/tree/src/stdio/vfprintf.c
  • @MisterTusk:评论不是为了回答这个问题。他们的目的是要求澄清或有限讨论。
  • @MisterTusk 给你的任务是不可能的或者你应该编写自己的代码来进行格式化。我赌的是后者。例如,实现您自己的类似printf 的函数,该函数不依赖于任何库函数并且仅使用系统调用执行其输出,这可能是一个合理的分配。

标签: c system-calls


【解决方案1】:

关于系统调用的问题需要在特定实现(操作系统/内核)的上下文中进行,因为系统调用的概念本身并不是通用的,而是特定于实现的,而且许多操作系统甚至没有将它们作为稳定的公共您可以从应用程序中使用的界面。我假设你问的是 Linux,这个问题在哪里最有可能是有意义的。

所以回答你的问题,没有这样的系统调用。系统调用通常用于执行输入和输出、更改进程状态以及执行需要跨权限域或进程上下文的其他操作。很少有系统调用来执行纯粹计算的任务,并且将格式字符串加上与格式说明符对应的多个参数转换为字节序列纯粹是计算

如果您愿意自己编写代码进行格式化,您当然可以通过write 系统调用编写输出。

【讨论】:

    猜你喜欢
    • 2018-09-10
    • 2022-01-23
    • 1970-01-01
    • 2012-10-08
    • 2010-10-11
    • 2017-03-23
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多