我有一个以前打开(通过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] 举报,一经查实,本站将立刻删除。