2017-10-11 71 views
0

我試圖僅使用本手冊第二部分(http://man7.org/linux/man-pages/dir_section_2.html)中描述的Linux系統調用寫入stdout。在Linux系統調用時使用格式說明符write()

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部分。因爲計算緩衝區的長度並不是我的問題的一部分,所以我將它包括在內以簡化。

回答

0

使用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"); 
+0

不幸的是,對於這項任務,我不能使用snprintf(),因爲它不在Linux手冊的第2部分。 – adhdj

+0

然後你不能使用格式說明符,它們是'printf()'函數族的一部分。 – Barmar

+0

嘿!我開始懷疑我無法做到。謝謝! – adhdj