2013-04-13 18 views

答えて

17

POSIXは、ティルド展開を含むシェルのような拡張を実行するためにwordexp(3)を提供します。

4

パス内のチルダはシェル固有のものです。最初の文字がチルダとスラッシュ(または文字列のチルダ末尾)であるかどうかを確認し、チルダを環境変数HOME(これはgetenvから取得できます)の値に置き換えます。

2番目の文字がでない場合は、のスラッシュは、おそらく~user/pathの形式です。次に、ユーザー名を抽出して、ユーザー名を使用する必要があります。 getpwnamを使用して、そのユーザーのホームディレクトリを含むユーザーのパスワードエントリを取得します。

13

あなたが私はそれがシェルに組み込まれていると言いたい

#include <stdio.h> 
#include <wordexp.h> 

int main(int argc, char* argv[]) { 
    wordexp_t exp_result; 
    wordexp(argv[1], &exp_result, 0); 
    printf("%s\n", exp_result.we_wordv[0]); 
} 
+2

これを関数で使用する場合は、メモリが漏れないように 'wordfree(&exp_result);を追加することをお勧めします。 – ishmael

関連する問題