gpt4 book ai didi

c - 为什么在删除目标文件后写入文件描述符会成功?

转载 作者:IT王子 更新时间:2023-10-29 00:43:51 25 4
gpt4 key购买 nike

代码:

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);
}

在sleep()期间,你删除了test.txt,但是进程写入成功了!为什么?如果是日志“单例”实例,你删除磁盘上的文件。写入成功,但你什么也得不到。

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.
}

“取消链接”不能解决这个问题。

最佳答案

manual page for unlink(2)明确指出:

unlink() deletes a name from the file system. If that name was the last link to a file and no processes have the file open the file is deleted and the space it was using is made available for reuse.

If the name was the last link to a file but any processes still have the file open the file will remain in existence until the last file descriptor referring to it is closed.

作为caf在评论中出色地指出:

The write() is successful because it writes to the file, which still exists at this point even though it no longer has a name. The filename and the file itself are distinct, and have separate lifetimes.

关于c - 为什么在删除目标文件后写入文件描述符会成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8396436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com