C言語関係掲示板

過去ログ

No.608.CのプログラムによってUNIX上のディレクトリ移動を行うには?

[戻る] [ホームページ]
No.5890

CのプログラムによってUNIX上のディレクトリ移動を行うには?
投稿者---S(2003/04/21 19:51:05)


初めて質問投稿します。
UNIX環境で、C言語のソースからディレクトリ移動しようと
思って、

#include <ctype.h>

int main(int argc,char*argv[])
{
        system("cd foo");
}

なるコードを書いてみたのですが、ダメでした。
別のシェルが走ってコマンドを実行してしまって、
カレントディレクトリがfooに移りません。
C言語の質問というよりはUNIXの質問かも知れませんが、
これについてアイデアをお持ちの方は是非御教示ください。
よろしくお願いいたします。



No.5892

Re:CのプログラムによってUNIX上のディレクトリ移動を行うには?
投稿者---おっ!(2003/04/21 19:57:03)


>カレントディレクトリがfooに移りません。

man 2 chdir
でどうだろ。

No.5896

Re:CのプログラムによってUNIX上のディレクトリ移動を行うには?
投稿者---S(2003/04/22 02:09:00)


>>カレントディレクトリがfooに移りません。
>
>man 2 chdir
>でどうだろ。

お返事ありがとうございます。

調べてみましたが、chdirコマンドはありませんでした。
chdirは標準のUNIXコマンドではないみたいです。

過去ログNo.166に私と同じような質問がありました。
それによると、chdirを定義するヘッダが存在するようですが、
コールしても上手くいかなかったようです
(私も試してみましたが、やっぱり無理そうでした)。

仕方が無いので、プログラムに、ディレクトリ名をcdコマンドと共に
固定ファイルに吐き出させて、現行シェルにそれを読み込ませることに
しました。.bashrcに
alias cd_hacked="prog file_name ; source file_name ; rm -f filename"
という具合にエイリアス登録しておけばコマンド一発です。
ダーティな方法ですがとりあえずこれで満足しておきます
(要は「プログラムによるディレクトリ選択」と「そのディレクトリへの移動」
を簡単に行いたかっただけなので)。




No.5897

Re:CのプログラムによってUNIX上のディレクトリ移動を行うには?
投稿者---かずま(2003/04/22 03:18:08)


> 調べてみましたが、chdirコマンドはありませんでした。
> chdirは標準のUNIXコマンドではないみたいです。

chdirはないでしょうが、chdirシステムコールはあります。UNIX ならね。
$ cd /tmp
$ mkdir foo
$ cat a.c
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
    system("pwd");
    chdir("foo");
    system("pwd");
    return 0;
}

$ gcc a.c
$ ./a.out
/tmp
/tmp/foo
$


No.5898

Re:CのプログラムによってUNIX上のディレクトリ移動を行うには?
投稿者---S(2003/04/22 05:21:17)


>chdirはないでしょうが、chdirシステムコールはあります。UNIX ならね。

お返事ありがとうございます。

申し訳ありません、私が何をしたかったのか
説明不足だったと思います。

こういう事をしたかったんです。

[/bin]$./prog <- Cの実行プログラムです。
[/foo]$

つまり、私がやりたかったことは、呼び出し元のシェルのカレントを、
プログラムによって変えることだったんです。

No.5896に書いたとおり、chdirをコールするプログラムを
作ってはみたのですがそれでもダメでした。
もちろん、かずま氏のサンプルのように、プログラム内部ではきちんと
ディレクトリ移動がなされる事は仰るとおりです
(恐らくchdirを敢えて使わずともsystem("cd foo");でもOKかと)。


No.5902

Re:CのプログラムによってUNIX上のディレクトリ移動を行うには?
投稿者---おっ!(2003/04/22 10:00:39)


>[/bin]$./prog <- Cの実行プログラムです。
>[/foo]$

それはシェルのビルトインコマンドにしないとダメですな。
もしOSのソースがあるならproc構造体とfiledesc構造体を
見てみてください。

No.5900

Re:CのプログラムによってUNIX上のディレクトリ移動を行うには?
投稿者---S(2003/04/22 06:33:28)


>#include <ctype.h>

ではないですね。

#include <stdlib.h>

の間違いです。。