unlink(file_name)

官方描述:

unlink的文档是这样描述的:

    unlink()  deletes  a  name  from  the  filesystem.  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.    If the name referred to a symbolic link the link is removed.    If the name referred to a socket, fifo or device the name for it is removed but processes which have the object open may continue to use it.    首先你要明确一个概念,一个文件是否存在取决于它的inode是否存在,你在目录里看到的是目录项里一条指向该inode的链接,而不是文件的本身.
    当你调用unlink的时候他直接把目录项里的该条链接删除了,但是inode并没有动,该文件还是存在的,这时候你会发现,目录里找不到该文件,但是已经打开这个文件的进程可以正常读写.只有当打开这个inode的所有文件描述符被关闭,指向该inode的链接数为0的情况下,这个文件的inode才会被真正的删除.
    从unlink的名字上就应该能判断出来,unlink含义为取消链接,remove才是删除的意思

 

unlink()函数功能即为删除文件。执行unlink()函数会删除所给参数指定的文件。

unlink()函数返回值: 成功返回0,失败返回 -1

remove()与unlink()的区别:

  • 当remove() 中的pathname指定问文件时,相当于调用unlink 删除文件链接
  • 当remove() 中的pahtname指定为目录时,相当于调用rmdir 删除目录
#include<unistd.h>
#include<stdio.h>
#include<fcntl.h>
#include<assert.h>int main()
{int fd = open("/zgaoq/q.txt", O_RDWR | O_TRUNC | O_CREAT, 0664);if (df < 0) {return -1;    }if(unlink("/zgaoq/q.txt") < 0){printf("unlink errpr!\n");}char buff[256] = {0};write(fd, "hello world!", 12);if(lseek(fd,0,SEEK_SET) == -1){printf("lseek error!\n");}read(fd, buff, 12);printf("%s\n",buff);return 0;
}

因此:执行unlink(filename)之后,并不会立即删除文件,还可以对文件进行读写操作,只有当打开这个文件对应的inode的文件描述符都关闭了之后才会将该文件删除。

 

总结:

调用unlink()的时候,文件还是存在的,只是目录里找不到该文件了,但是已经打开这个文件的进程可以正常读写,只有打开这个文件对应的inode的所有fd都关闭时,这个文件才会被删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql server行级锁,排它锁,共享锁的使用

一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏读 A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修…

日常学习笔记(1)

2019/03/19 21:12 1.函数&#xff1a;numpy.linspace(start,stop,num50,endpointTrue,retstepFalse,dtypeNone)参数&#xff1a; start&#xff1a;scalar类型&#xff08;个人理解是标量的意思&#xff0c;这不是一个具体的数据类型&#xff0c;而是指某一些数据类型&#xff…

淘宝开发平台知识点一,入门指南

App Key&#xff1a;12038991 App Secret&#xff1a;bb6e1d29db744ed023bfed6a3af6f4f3 1,测试环境下&#xff0c;获取授权码&#xff0c;只有十分钟 http://open.taobao.com/isv/authorize.php?appkey12038991 2&#xff0c;http://container.api.tbsandbox.com/container?…

【转】Linux 下修改Tomcat使用的JVM内存大小

转自 &#xff1a;http://blog.csdn.net/sully2008/article/details/6457570 我的服务器的配置&#xff1a;# OS specific support. $var _must_ be set to either true or false.JAVA_OPTS"-Xms1024m -Xmx4096m -Xss1024K -XX:PermSize512m -XX:MaxPermSize2048m"…

OpenSSL 创建自签名证书

1、生成服务器私钥openssl genrsa -out client.key 40962、生成证书签名请求&#xff08;CSR&#xff09;openssl req -new -key client.key -out client.csr3、使用上一步的证书签名请求签发证书openssl x509 -req -days 365 -in client.csr -signkey client.key -out client.…

C++ functor 仿函数

在C中&#xff0c;仿函数不是一个函数&#xff0c;是一个类&#xff0c;这个类实现了函数的功能。 如果我想实现一个求和的功能&#xff1a;定义一个Sum类&#xff0c;让其中的()函数实现这个功能&#xff0c;代码如下&#xff1a; class Sum { public:Sum() default;virtua…

C#中实现鼠标拖动窗体的方法

用C#实现鼠标拖动窗体&#xff0c;方法可能有很多&#xff0c;不过我想最好多还应该是直接记录鼠标的位置&#xff0c;进而完成操作&#xff1a; private void AddList_MouseDown(object sender, MouseEventArgs e){// Gets the x-coordinate and y-coordinate of …

Sql Server 2008将数据库导出sql脚本并导出数据

1.使用Sql Server Management Studio 2008 连接数据库。 2.选中要导出数据的数据库节点&#xff0c;点鼠标右键&#xff0c;在菜单中选择“任务”->“生成脚本”&#xff0c;如图&#xff1a; 3。在弹出的界面中&#xff0c;点2次“下一步”进入如图界面中&#xff0c;把“编…

SQL SERVER 查询表的行数

SELECT OBJECT_NAME(ii.id) TableName ,rows FROM sysindexes ii INNER JOIN sysobjects oo ON ( oo.id ii.idAND oo.xtype U ) WHERE ii.indid < 2 ORDER BY rows desc ; 转载于:https://www.cnblogs.com/JinweiChang/p/10592680.html

C/C++中的占位符

在C、c语言中增加了占位符&#xff0c;目的是为了减少内存的使用&#xff0c;但是现在内存已经不是瓶颈了&#xff0c;进而很少用占位符了 union V {struct X {unsigned char s1:2;unsigned char s2:3;unsigned char s3:3;} x;unsigned char c; } v; v.c 100; printf("%d…

Book

Folksonomies: Indexing and Retrieval in the Web 2.0 202转载于:https://www.cnblogs.com/kuiyuan/archive/2010/04/06/1705811.html

男性早孕-从软件与程序的区别说起

引言 今日新闻《如此医院太荒唐大小伙子被查出“早孕”》&#xff0c;百度搜索结果如下&#xff1a; 看到这结果&#xff0c;大家啥感想&#xff1f; 按常理&#xff0c;医院粗心、医疗机构忽视患者权益、经济利益的恶性驱动等等言论&#xff0c;唾沫星子基本足以把肇事医院来个…

spring-boot+swagger实现WebApi文档

1、引用依赖包 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.5.0</version> </dependency <dependency><groupId>io.springfox</groupId><artifact…

如何使用单线程处理高并发

单线程相当于一个队列&#xff0c;只能按照顺序执行&#xff0c;如果要实现高并发&#xff0c;可以借助下面的方式&#xff1a; (1)、IO多路复用技术 (2)、采用事件驱动模型&#xff0c;基于异步回调来处理事件来

Sql优化文档

sql 优化 目的 数据库参数进行优化所获得的性能提升全部加起来只占数据库应用系统性能提升的40%左右&#xff0c;其余60%的系统性能提升全部来自对应用程序的优化。许多优化专家甚至认为对应用程序的优化可以得到80%的系统性能提升。因此可以肯定&#xff0c;通过优化应用程序来…

为什么在中国“公有云”落地那么难?

【编者按】本文是在美国和中国的互联网和云服务领域有近10年经验的专业人士Lillian Shao应PingWest邀请撰写的文章。从专业的角度解析了为什么在美国和世界很多地区已经大范围普及、对创业者帮助甚大的“公有云”服务&#xff0c;在中国却很难落地的各个维度原因。大家可以直接…

含有5亿个整数的大文件,如果排序?

给你1个文件bigdata&#xff0c;大小4663M&#xff0c;5亿个数&#xff0c;文件中的数据随机,如下一行一个整数&#xff1a; 61963023557681612158020393452095006174677379343122016371712330287901712966901...7005375 现在要对这个文件进行排序&#xff0c;怎么搞&#xf…

jmeter连数据库

前提&#xff1a;jmeter不能直接连数据库&#xff0c;需要导入一个jar包 步骤&#xff1a; 1、右键线程组--添加--配置元件--JDBC Connection Configuration 2、jdbc的基本配置&#xff1a;可以修改jdbc配置的名称、随便填写变量名Variable Name&#xff0c;再填写最下面的数据…

设置窗口的光标,设置ToolBar,设置状态栏

代码 //ex_10Dlg.cpp : implementation file//#include "stdafx.h"#include "ex_10.h"#include "ex_10Dlg.h"#ifdef _DEBUG#definenew DEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[] __FILE__;#endif///////CAboutDlg dialog used for App Abo…

java 实例变量和类变量

当JAVA程序执行时&#xff0c;类的字节码文件就被加载到内存&#xff0c;如果该类没有创建对象&#xff0c;类的实例成员变量不会被分配内存&#xff0c;但是类中的类变量在类被加载到内存的时候&#xff0c;就分配了相应的内存空间。如果该类创建对象&#xff0c;那么不同的实…