我有一个问题,为什么在从shell中删除目标文件后,write()系统调用仍然成功写入了什么?
当我在前几次成功写入后删除文件时,我希望看到write()失败,但它没有,我不知道它写在哪里.
谁能向我解释一下,谢谢!
int fd = open ("./test.txt", O_CREAT | O_RDWR | O_APPEND, 0666);
if (fd == -1)
error_and_exit ("open() failed");
ssize_t written = 0;
char buf[] = "apple\n";
while (true)
{
printf ("perform write...\n");
written = write (fd, buf, sizeof(buf));
if (written <= 0)
error_and_exit ("write failed");
printf ("=> wrote %d bytes\n", written);
printf ("sleep %d...\n\n", SLEEP_TIME);
sleep (SLEEP_TIME);
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*ler 10
文件未被物理删除(在inode级别,如果文件系统具有inode),直到最后一个打开的文件描述符在文件上关闭,即使文件没有剩余的名称引用(因为它的姓氏已被取消链接,又被删除了).这是为POSIX(Unix)系统创建临时但匿名文件的方法,方法是创建文件然后删除其名称.
请注意,如果您有一个守护程序进程使日志文件保持打开状态,守护程序可能会继续写入旧文件(而不是新文件),并且在守护程序终止之前不会释放该空间(或者更准确地说,关闭旧日志文件的文件描述符).
| 归档时间: |
|
| 查看次数: |
191 次 |
| 最近记录: |