Ouvrir le répertoire en utilisant C
Je suis en acceptant le chemin à travers l'entrée de ligne de commande.
Quand je fais
dir=opendir(args[1]);
il ne' t entrer dans la boucle...j'.e dir==null
...
Comment puis-je passer l'entrée de ligne de commande dir pointeur?
void main(int c,char **args)
{
DIR *dir;
struct dirent *dent;
char buffer[50];
strcpy(buffer, args[1]);
dir = opendir(buffer); //this part
if(dir!=NULL)
{
while((dent=readdir(dir))!=NULL)
printf(dent->d_name);
}
close(dir);
}
./a.out /root/TEST is used to run the program..
./a.out --> to execute the program
/root/TEST --> input by the user i.e valid path
source d'informationauteur Vinod K
Vous devez vous connecter pour publier un commentaire.
Vous devriez vraiment écrire votre code, mais voilà. Pour commencer:
Vous devez vérifier dans votre cas, le
args[1]
est définie à la fois et se réfère à un répertoire réel. Lorsque cela est exécuté avec:(
tmp
est un sous-répertoire de mon répertoire en cours, mais vous pouvez utiliser n'importe quel répertoire valide), j'obtiens:Noter que vous devez passer un répertoirepas un fichier. Quand j'execute:
J'obtiens:
parce que c'est un fichier plutôt que d'un répertoire (si vous êtes sournois, vous pouvez essayer de l'utiliser
diropen(dirname(v[1]))
si le premierdiropen
échoue).Paramètres passés à la C exécutable du programme n'est rien mais un tableau de chaîne de caractères(ou un pointeur de caractère),de sorte que la mémoire ont déjà été alloués pour ces paramètre d'entrée avant de votre programme d'accès à ces paramètres,donc pas besoin d'allouer de la mémoire tampon,et de cette façon vous pouvez éviter de code de gestion d'erreur dans votre programme(Réduire les risques d'erreur de segmentation :)).
Quelques commentaires sur le segment de code, mais pour la plupart, il devrait fonctionner...
int main
- la norme définitmain
comme retournant unint
.c
etargs
sont généralement nomméargc
etargv
respectueusement, mais vous êtes autorisé à nommer quelque chose...
args[1]
est de plus de 50 octets,buffer
ne sera pas en mesure de tenir, et vous écrirez à la mémoire que vous ne devriez pas. Il n'y a pas de raison que je vois pour copier la mémoire tampon ici, de sorte que vous pouvez contourner ces problèmes en tout simplement pas l'utiliserstrcpy
......
Si ce retour
NULL
il peut l'être pour plusieurs raisons:./your_program my directory
qui sera un échec, car il essaie deopendir("my")
)Voici une méthode simple à mettre en œuvre
ls
l'aide de la commandec
. Pour exécuter l'utilisation par exemple./xls /tmp