2009-08-18 5 views
11

Y at-il moyen par lequel je peux changement à tout répertoire en exécutant un programme C?Y at-il un moyen de changer de répertoire en utilisant le langage C?

+0

Vous cherchez 'cd'? Ou cherchez-vous un moyen de définir un répertoire actif en C? – Eric

+2

On l'appelle un marteau! : P –

+0

Cette question est souvent donnée en tant qu'exercice aux étudiants se penchant des systèmes d'exploitation semblables à unix. Si c'est le cas, prêtez une attention particulière à ce que Peter dit à propos de * quels processus * peuvent et ne peuvent pas être affectés. – dmckee

Répondre

11

En fonction de votre système d'exploitation, il y a différents appels pour changer le répertoire courant. Cela ne changera normalement que le répertoire courant du processus exécutant l'exécutable. Une fois le processus terminé, vous serez dans le répertoire dans lequel vous avez démarré.

+1

Merci Peter, il semble donc que le changement physique du répertoire n'aura pas lieu. –

+2

Le répertoire courant fait partie de l'état d'un processus (comme les fichiers ouverts, les cartes mémoire, les variables d'environnement ...). Habituellement, un processus ne peut pas changer l'état d'un autre processus (habituellement, le débogueur et ainsi de suite peuvent avoir des privilèges spéciaux, mais c'est une autre histoire). – AProgrammer

+5

Et c'est pourquoi 'cd' est un shell intégré, pas un exécutable séparé. –

12

La fonction chdir(). Pour plus d'informations, utilisez man chdir.

0
#include "stdafx.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

int main(int argc, char* argv[]) 
{ 
    system("C:\\windows\\notepad.exe"); 
    chdir("C:\\windows\\desktop"); 
    return 0; 
} 

Comme par this

+2

Avez-vous testé cela? – alk

8

chdir() modifie uniquement le répertoire de travail actuel du processus, mais pas le contexte dans lequel vous travaillez. Supposons que vous exécutez un programme dans le terminal et votre répertoire courant est /home/Documents, puis sur l'exécution d'un programme ayant les lignes suivantes

chdir("cd ../Downloads"); 

ne changera pas le répertoire de travail du terminal, mais les changements que le processus ne.

Questions connexes