そのため、以前の C プログラミングの探求に関連する問題がいくつかあります。今回はor/etc/passwd
を使ってファイルと名前を分ける方法について。取り決めは、ユーザー名を 2 つの部分に分けたいということです。最初の名前とミドル ネーム (1 つを取得したと仮定) で、2 番目の名前で姓です。しかし、名前を正しく区切る方法が見つかりません。最初の部分ではファースト ネームで動作するようにしましたが、ラスト ネームにミドル ネームが付けられます。strtok_r
strtok
行は次の/etc/passwd
ようになります。
s214907:x:1240:1251:Jonas Villa,,,:/home/s214907:/bin/bash
s212167:x:1297:1306:Konstantina Pavlova Rusenkova,,,:/home/s212167:/bin/bash
私が得るものの例:
[Konstantina] [Pavlova Ruskenova]
印刷方法の例:
[Konstantina Pavlova] [Ruskenova]
これまでの私のコードは次のとおりです。
char line[256], words[20];
char *mname, *tmp, *uid, *sp, *lname, *uname, *name, *fname, *tmps;
int bindex=0, index, cnt =0, count;
char *rest = NULL;
FILE*fp = fopen("/etc/passwd","r");
size_t len = 0;
char *next = NULL;
while(fgets(line,256,fp)!=NULL)
{
sp = strtok(line, ":");
tmp = strtok(NULL, ":");
uid = strtok(NULL, ":");
tmp = strtok(NULL, ":");
name = strtok(NULL, ":,");
if(atoi(uid) > 999)
{
for(tmps = strtok_r(name, " ", &rest);
tmps != NULL;
tmps = strtok_r(NULL, ",", &rest)) {
tmps = strtok(tmps, ",");
printf("[%s]\n", tmps);
}
}
cnt++;
}
fclose(fp);