open()
échoue avec ENOENT (no such file or directory) lors de la première tentative mais fonctionne correctement lors des tentatives suivantes.
Mon programme crée un processus fils et attend que le processus fils se termine à l'aide de la fonction waitpid()
. Le processus enfant crée une copie d'un chemin d'accès à un fichier reçu de l'utilisateur dans un répertoire spécifique en utilisant la fonction execl()
.
Une fois que l'enfant sort, le processus parent ouvre cette copie nouvellement créée en utilisant open()
. Cependant, il échoue avec ENOENT (no such file or directory) à la première tentative. Je peux voir que le processus enfant crée un fichier dans le répertoire spécifié.
Si je relance ce programme en fournissant le même nom de fichier, il fonctionne bien. Ma question est la suivante : pourquoi le fichier ne s'ouvre-t-il pas du premier coup ? Dois-je rafraîchir le répertoire ou que se passe-t-il ?
Je suis sur redhat
VOICI UN EXTRAIT DE CODE RAPIDE ET SALE
my_function()
{
char *src = "TEST.txt";
char *dest = "./Output/";
char *fp = "/Output/TEST.txt";
int fd;
struct fstat file_stat;
pid_t PID = fork();
if(PID == -1)
exit(1);
if(PID == 0)
{
execl("/bin/cp", "/bin/cp", src, dest);
exit(1);
}
if(PID > 0)
{
int chldstat;
pid_t ws = waitpid(PID,&chldstat,WNOHANG);
}
if(stat(fp,&file_stat) == -1)
{
perror("stat");
exit(1);
}
if((fd = open(dest,O_RDWR)) == -1)
{
perror("open");
exit(1);
}
if((fp=mmap(0,file_stat.st_size,PROT_READ | PROT_WRITE,fd,0)) == -1)
{
perror("mmap");
exit(1);
}
//OTHER ROUTINES
.............
............
............
}