私はCの新機能で、whoamiを実装しようとしています。私は次のコードを持っています:getlineとstrtokをループで一緒に使用する
#define _POSIX_SOURCE
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h> // strtok
int str_to_int(const char *str)
{
int acc = 0;
int i;
for (i = 0; str[i] != '\0'; ++i) {
acc = (10 * acc) + (str[i] - 48); // 48 -> 0 in ascii
}
return acc;
}
int main()
{
FILE *passwd;
char *line = NULL;
size_t line_size;
passwd = fopen("/etc/passwd","r");
uid_t uid = getuid();
while (getline(&line, &line_size,passwd) != -1) {
char *name = strtok(line,":");
strtok(line,":"); // passwd
char *user_id = strtok(line,":");
if (str_to_int(user_id) == uid) {
printf("%s\n",name);
break;
}
}
fclose(passwd);
return 0;
}
whileループの中にラインポインタを保存する必要がありますか? strtokはそれを何とか変更すると思うので、私はstrtokで使用する前に、行をコピーする必要があるか、行の先頭アドレスをコピーする必要があるかわかりません。
'atoi'や' strtol'を使って文字列をカスタム関数の代わりに整数に変換することができます。 –