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