2010-09-24 83 views
1

我必須從我的C程序中更改工作目錄。爲此,我使用了以下命令: execl("/bin/cd","cd","..",(char*)0); 但這個命令是不是改變目錄? 這個命令有什麼問題,或者有沒有其他方法可以從C程序中更改工作目錄?如何使用C程序中的exec命令更改目錄?

回答

1

您需要使用chdir系統調用來更改調用進程的工作目錄。

10

要改變你應該使用chdir當前目錄:

int chdir(const char *path); 

如果成功則返回0

你不能有以下幾個原因使用EXECL:

  1. cd一般貝殼內建命令;
  2. 在大多數系統上/bin/cd不存在;在具有它的極少數系統上,它會更改當前目錄,然後生成子shell進程;
  3. 當前目錄是一個進程的屬性:如果您使用/bin/cd更改當前目錄,則在進程終止後立即丟失目錄更改;
  4. 如果您使用exec系列的功能,則當前過程映像會被替換爲新的過程映像 - 您可以使用system,但不能解決前面的3個問題。
+0

這不回答這個問題。有些課堂作業有嚴格的規定,你需要使用exec而不是chdir。 – User 2015-03-16 04:29:25

+0

然後,某些類別分配具有與POSIX標準互斥的嚴格規則。 – 2015-03-18 00:47:01

2

你正在做什麼都不行,因爲exec家人通話將實際在當前進程替換當前的計劃。換句話說,您將被終止,因此,當cd完成後,您的父級過程將再次接管。

如果要更改當前進程的工作目錄,請使用chdir。如果您想在退出時更改它,那麼您的運氣不好,因爲您的程序本身正在與啓動它的父進程分開運行。

所以,除非你與父母有某種形式的溝通,否則這是行不通的。

相關問題