我想运行一个命令行参数来解释用户名、名字、电子邮件和主目录。我把用户名部分写对了,但其余部分放错了地方。我不知道我是否把strtok函数放在了正确的位置,每次我编译时,它都会错误地输出“变量未使用”。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Usage: %s <username>\n", argv[0]);
return 1;
}
char *username = argv[1];
FILE *passwd = fopen("/etc/passwd", "r");
if (!passwd) {
perror("fopen");
return 1;
}
char *line = NULL;
size_t max_length = 0;
ssize_t ret_val = 0;
char line_copy[1000];
while ((ret_val = getline(&line, &max_length, passwd)) > 0) {
strncpy(line_copy, line, 999);
char *user = strtok(line_copy, ":");
if (strcmp(user, username) == 0) {
char *name = strtok(NULL, ":");
char *email = strtok(NULL, ":");
char *home_dir = strtok(NULL, ":");
printf("user: %s\n", user);
printf("name: %s\n", name);
printf("email: %s\n", email);
printf("home directory: %s\n", home_dir);
}
}
fclose(passwd);
passwd = NULL;
return 0;
}
1条答案
按热度按时间hs1ihplo1#
至少在Linux上/etc/passwd包含以冒号分隔的字段登录名、密码、用户ID、组ID、用户名、主目录和shell。您需要调用
strtok()
来获取您想要跳过的字段,并且没有电子邮件字段:请考虑改用
getpwnam()
: