微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Linux中删除一个文件,我只有文件描述符

我有一个以前打开(通过open )的int文件描述符,我需要删除文件

我真的必须先获取文件名称调用remove ? (例如,通过使用C中从文件描述符获取文件名中的技术)

还是有一些其他的(linux特定的)完全基于文件描述符的方式吗?

我已经search,我能find的最好的就是上面的答案。

在Linux中写入和读取相同的fd而不使用fsync

如何强制Windows fat32驱动程序重新加载FAT表?

使用GCC构buildLinux可执行文件

C ++执行CMD命令

错误fread在C中

链接失败与gcc 4.8.2 / ld 2.24,成功与gcc 4.4.7 / ld 2.20

为什么这个C代码不能创build一个用户,组和其他权限读写的文件

UTC的时间戳在Windows上

C#不承认SafetokenHandle

通过C#确定本地组的成员

您可以使用/proc查看打开的fd链接的路径,实际路径获取符号链接的完整路径。

# ls -l /proc/8701/fd total 0 lr-x------ 1 root root 64 Apr 23 22:44 0 -> /dev/null lrwx------ 1 root root 64 Apr 23 22:44 1 -> /dev/null lrwx------ 1 root root 64 Apr 23 22:44 2 -> /dev/null lrwx------ 1 root root 64 Apr 23 23:19 20 -> socket:[16204] lrwx------ 1 root root 64 Apr 23 23:19 21 -> socket:[16205] lrwx------ 1 root root 64 Apr 23 22:44 3 -> socket:[18743] l-wx------ 1 root root 64 Apr 23 22:44 4 -> /var/lib/dhcp/dhclient-7a30dd46-5058-47aa-b71e-ff77cfbe4194-wlan0.lease lrwx------ 1 root root 64 Apr 23 22:44 5 -> socket:[16872] lrwx------ 1 root root 64 Apr 23 22:44 6 -> socket:[18747]

我不知道任何可以基于文件描述符移除文件函数,但是任何这样的函数首先必须得到路径,然后调用unlink 。

Linux上的文件描述符是进程和目录项之间的关联。 目录条目是路径(文件名)和inode之间的链接。 可以有许多与目录条目相关联的文件描述符,以及与inode相关联的许多目录条目。

当您unlink文件时,您将删除目录条目和inode之间的链接。 如果这是最后一个链接文件最终从磁盘中删除(即inode返回到空闲列表,inode使用的块也被释放)。

就我所知,只有remove和unlink ,这两个都需要一个路径,而不是一个fd。 这虽然有意义, 一个fd本质上只是一个读/写/关闭指针等等.fd不一定是指文件系统上的文件,所以对文件描述符的“删除”没有多大意义。

根据您的使用情况,如果文件内容不需要(即太大或可能有害),则可以使用fd将文件缩小为0字节。

ftruncate(fd,0);

这是一个由程序创建的临时文件吗? 如果是这样,你可能要考虑mkstemp() : http : //pubs.opengroup.org/onlinepubs/009695399/functions/mkstemp.html 。 如果您确定要获取FILE *考虑tmpfile()以及: http : //pubs.opengroup.org/onlinepubs/009695399/functions/tmpfile.html

在这种情况下,您不必担心删除文件。 只要你正确close()文件,操作系统将负责正确删除它(可能不会立即发生)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐