2017-10-11 14 views
0

설명서의 2 절에 설명 된 Linux 시스템 호출 (http://man7.org/linux/man-pages/dir_section_2.html) 만 사용하여 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

불행히도이 할당에 대해서는 Linux 설명서의 2 절에 나와 있지 않으므로 snprintf()를 사용할 수 없습니다. – adhdj

+0

그러면 형식 지정자를 사용할 수 없으며, 이들은'printf()'함수 군의 일부입니다. – Barmar

+0

Gotcha! 나는 그것을 할 수 없다고 의심하기 시작했다. 고맙습니다! – adhdj