2

我正在尝试仅使用手册第 2 节中描述的 Linux 系统调用(http://man7.org/linux/man-pages/dir_section_2.html)写入标准输出。

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

是我正在尝试使用的功能,但是我正在尝试将格式说明符合并到缓冲区中。理想情况下,它会像这样工作:

char *adjective = argv[1];
write(1, "This is a %s example\n", adjective, 19 + strlen(adjective));

但我显然不能这样做。我将如何去做类似的事情?

另外,我知道 strlen() 不是 Linux 系统调用第 2 节的一部分。为简单起见,我将其包括在内,因为计算缓冲区的长度不是我的问题的一部分。

4

1 回答 1

1

用于sprintf()格式化为缓冲区,然后写入:

char buffer[BUFSIZE];
int size = snprintf(buffer, BUFSIZE, "This is a %s example\n", adjective);
write(STDOUT_FILENO, buffer, strlen(buffer));

如果不能使用sprintf(),只需分别编写每个字符串。

write(STDOUT_FILENO, "This is a ", sizeof "This is a ");
write(STDOUT_FILENO, adjective, strlen(adjective));
write(STDOUT_FILENO, " example", sizeof " example");
于 2017-10-11T20:57:51.283 回答