// 3. 检查命令行参数 if (argc != 2) { printf("Usage: %s <new_hostname>\n", argv[0]); printf("Note: You need to run this program as root to change the hostname.\n"); exit(EXIT_FAILURE); }
printf("\nAttempting to change hostname to: '%s'\n", new_hostname);
// 4. 调用 sethostname // 注意:这需要 root 权限 if (sethostname(new_hostname, strlen(new_hostname)) == -1) { perror("sethostname"); if (errno == EPERM) { printf("Error: Permission denied. You must run this program as root (e.g., using sudo).\n"); } exit(EXIT_FAILURE); }
// 6. 再次使用 uname 验证 if (uname(&uname_info) == 0) { printf("[uname after change] Node name (hostname): %s\n", uname_info.nodename); }
printf("\n--- Important Notes ---\n"); printf("1. The hostname change is TEMPORARY and only lasts until the system is rebooted.\n"); printf("2. To make the change persistent, you need to update configuration files like /etc/hostname.\n"); printf("3. You need ROOT privileges to call sethostname.\n");
# 假设原始主机名是 'old-hostname' $ sudo ./sethostname_example NewTempName --- Demonstrating sethostname --- [Initial] Current hostname is: 'old-hostname' [uname] System name: Linux [uname] Node name (hostname): old-hostname [uname] Release: 5.4.0-XX-generic [uname] Version: #XX-Ubuntu SMP ... [uname] Machine: x86_64
Attempting to change hostname to: 'NewTempName' sethostname('NewTempName') succeeded. [After sethostname] Current hostname is: 'NewTempName' [uname after change] Node name (hostname): NewTempName
--- Important Notes --- 1. The hostname change is TEMPORARY and only lasts until the system is rebooted. 2. To make the change persistent, you need to update configuration files like /etc/hostname. 3. You need ROOT privileges to call sethostname.