int main(int argc, char **argv)
{
int fd = open("test.txt", O_CREAT|O_RDWR, 0200|0400);
if(fd == -1)
{
printf("failure to oepn");
exit(-1);
}
int iRet = write(fd, "aaaaaaaaaa", 10);
if(iRet == -1)
{
printf("failure to writer");
exit(-1);
}
sleep(10);
printf("You must remove");
iRet = write(fd, "bbbbbbbbbb", 10);
if(iRet == -1)
{
printf("failure to after writer");
exit(-1);
}
exit(0);
}
durante el sueño(), elimina el test.txt, pero el proceso de escritura con éxito por qué? si una instancia de registro "Singleton", elimina el archivo en el disco.write se realiza correctamente, pero no puede obtener nada.
class log
{
public:
void loggerWriter(std::string str);
int fd;
};
log::log(std::string filename):fd(-1)
{
fd = open(filename.c_str(), O_CREAT|)
//...
}
log::loggerWriter(std::string str)
{
writer(fd, str.c_str(), str.size());
}
int main()
{
log logger("text.txt");
//...
//I want to know the text.txt the text.txt have delete on the disk or not.
//if delete i can create another file to log.
}
"unlink" no puede resolver este problema.
El archivo existe, es solo que el truco de eliminación se utiliza para crear un archivo temporal oculto que se elimina físicamente en close()/exit(). – moshbear
No se realiza ningún archivo temporal oculto. Hay un archivo sin nombre, y hay su inodo con recuento de referencia! = 0. –
@MaximYegorushkin: el inodo en el disco tiene 0 nlink. El inodo en el núcleo tiene! = 0 refcount. Si el sistema se bloquea, la próxima vez que se ejecute 'fsck', notará los 0 nlinks y dtime = 0 y eliminará el archivo. – ninjalj