open()
завершается неудачно с ENOENT (такого файла или каталога нет) с первой попытки, но прекрасно работает при последующих попытках.
Моя программа разветвляет дочерний процесс и ожидает, пока дочерний процесс завершит использование waitpid()
.Дочерний процесс создает копию пути к файлу, полученного от пользователя в определенном каталоге, используя execl()
.
. После выхода из дочернего процесса родительский процесс открывает эту вновь созданную копию, используя open()
.Однако он завершается неудачно с ENOENT (нет такого файла или каталога) с первой попытки.Я вижу, что дочерний процесс создает файл в указанном каталоге.
Если я снова запустите эту программу, указав то же имя файла, то он будет работать нормально.Мой вопрос: почему он не открывает файл с первой попытки?Нужно ли обновлять каталог или что это?
Я на Redhat
ЗДЕСЬ БЫСТРЫЙ ЗАГРЯЗНЕННЫЙ КОД ОТКРЫТКИ
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
.............
............
............
}