2015-08-09 1 views
-1

Je suis occupé à coder un terminal simple en C sur Minix 3.1. Les commandes simples telles que touch a.txt ou date fonctionnent parfaitement. Mais quand je crée un répertoire tel que mkdir test, il crée un répertoire appelé USER=root et quand j'en essaye un autre, il est écrit USER=root: already exists. Je suis connecté en tant que root. J'utilise execvp() en C pour exécuter les commandes du terminal.Répertoire bizarre créé après l'exécution de mkdir après fork dans Minix (USER = root)

ls me donne ceci:

(null): HOME=/root: No such file or directory 
(null): PAGER=more: No such file or directory 
(null): LOGNAME=root: No such file or directory 
(null): TERM=minix: No such file or directory 
(null): PATH=/root/bin:/usr/local/bin:/vin:/usr/bin: No such file or directory 
(null): SHELL=/bin/sh: No such file or directory 
(null): TZ=GMT0: No such file or directory 
(null): EDITOR=vi: No such file or directory 
USER=root: 

Est-ce que quelqu'un sait ce que cela signifie réellement et comment je peux résoudre ce problème. J'ai essayé tout ce que je pouvais penser dans mon code pour essayer de résoudre ce problème, mais rien n'a fonctionné.

Merci pour toute aide First part of my code

Second part of my code Last part of my code

Im appelant executeCommand d'une autre fonction qui retourne simplement l'état de loopShell

+0

Montrez-nous votre code. J'ai une idée de ce qui pourrait se passer, mais savoir vaut mieux que de deviner. – duskwuff

+2

Quelque chose mélange la liste d'environnement avec la liste d'arguments. – Pointy

+0

@ Anton.P Il n'utilise pas bash et cela n'a rien à voir avec tout .bashrc. – Jens

Répondre

2

Vous créez la liste des arguments à execvp de manière incorrecte. Vous renvoyez un tableau alloué sur la pile (un tableau avec une durée de stockage automatique). Une fois que la fonction qui l'a créé retourne le tableau n'est pas alloué et le pointeur vers lui n'est plus valide. Comme une simple solution rapide serait de faire le tableau static de sorte qu'il reste alloué après le retour de la fonction. Par exemple:

static char *tokens[SPLIT_SIZE]; 

Une autre erreur dans votre programme tente d'utiliser free sur les objets ne sont pas attribués à malloc, calloc ou realloc.

+0

Merci. Je vais essayer ça. Encore une fois désolé d'avoir à saisir mon code. Je viens de commencer à utiliser Minix et je n'ai aucun pilote activé ou quoi que ce soit. Cela a fonctionné merci beaucoup! – Gordy