bashなどの shell では
- "~/*"
- "$HOME/*"
はホームディレクトリ以下のファイル名に展開されます.
これをC/C++で実装する方法です
実装
wordexp(3) を使います
#include <wordexp.h> #include <stdio.h> int main(int argc, char *argv[]) { wordexp_t exp; int flags = 0; int ret; ret = wordexp("~/*", &exp, flags); if (0 == ret){ int i; for (i=0; i<exp.we_wordc; i++){ printf("%s\n", exp.we_wordv[i]); } } wordfree(&exp); return 0; }
なお wordexp は POSIX.1‐2001, POSIX.1‐2008 準拠の関数だそうです.似た関数としては glob や fnmatch がありますが,wordexpは shellのパターンや環境変数も使える点が違います.