sethostname
관련 없는 이유로 시스템 호출을 사용하여 Linux 시스템의 호스트 이름을 빈 문자열로 설정하고 싶습니다 .
#include <unistd.h>
int main()
{
sethostname("", 0);
return 0;
}
원칙적으로는 작동하지만 a.) 빈 호스트 이름이 SUSv2 및 POSIX.1과 호환되는지, b.) 빈 호스트 이름을 설정하면 현재 예상하지 못하는 부정적인 부작용이 발생할 수 있는지 궁금합니다.
답변1
일부 프로그램에서는 혼란스러운 출력을 얻을 수 있으며, 이로 인해 다른 프로그램에서 구문 분석을 시도하면 문제가 발생할 수 있습니다.
예를 들어, 내가 시도한 시스템에서 출력은 uname -a
다음과 같았습니다.
Linux 2.6.42-amd64 #1 SMP ...
여기서 호스트 이름은 두 공백 사이에 있어야 합니다. 프로그램이 awk가 기본적으로 수행하는 방식, 즉 연속된 공백을 하나로 처리하는 방식으로 구문 분석을 시도하면 결국 잘못된 필드를 선택하게 됩니다. 물론, uname -m
구문 분석 대신 또는 다른 대안을 사용할 수도 있지만 uname -a
, 다른 프로그램에도 동일하게 적용됩니다.
rsyslog
빈 문자열을 자리 표시자로 바꿔서 이 문제를 우회하세요.
Jan 15 18:28:14 localhost-empty-hostname kernel: [32741563.144045]...
이로 인해 문제가 발생해서는 안 되지만 예쁘지도 않습니다.
(글쎄, 적어도 데비안에서는 hostname
명령이 빈 호스트 이름을 허용하지 않기 때문에 누군가 이것이 지원되는 구성이라고 생각하지 않는 것 같습니다. 커널이 이것을 허용한다는 사실에 조금 놀랐지만 아마도 그렇지 않을 것입니다. 어쨌든 받아들이십시오. 출력 외부의 일부를 제외하고 내부적으로 사용하십시오.)