Linux unlink命令

本文将会讲述Linux系统下unlink删除文件命令的用法。 Unlink 命令会直接调用linux系统下的unlink系统函数,来删除指定的某一个文件。

Linux unlink 命令格式及参数

命令格式如下:

Unlink {文件名}
Unlink {选项}

Unlink 参数如下:

--help – 显示该命令的帮助信息并退出命令
--version –显示命令的版本信息并退出命令

Unlink命令只有提供了上面的两个参数。

Linux unlink命令实例

1# 删除当前目录下的名为fio.txt 的文件,执行下面的命令:

# unlink fio.txt

命令输出如下:

root@devops:~/osetc# ls
fio1.txt  fio2.txt  fio.txt
root@devops:~/osetc# unlink fio.txt
root@devops:~/osetc# ls
fio1.txt  fio2.txt

上面我提到过,unlink 命令只能同时删除一个文件,当你指定多个文件时,系统会提示错误信息。 如下:

root@devops:~/osetc# unlink fio1.txt fio2.txt
unlink: 额外的操作数 "fio2.txt"
Try 'unlink --help' for more information.
root@devops:~/osetc#

Linux unlink系统函数

Unlink函数会从文件系统中删除一个指定的文件名称。如果名称是文件的最后一个连接,并且没有其它进程将文件打开,名称对应的文件会实际被删除。
Unlink函数用法:

#include
int unlink(const char *pathname);

Unlink函数参数:
pathname:指向需解除连接的文件名。
返回说明:

成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EACCES:权能不足
EFAULT: 内存空间不可访问
EIO:发生输入输出错误
EISDIR:pathname索引的是目录
ELOOP :路径解析的过程中存在太多的符号连接
ENAMETOOLONG:路径名超出可允许的长度
ENOENT:路径名部分内容表示的目录不存在,或者是悬浮的连接
ENOMEM: 核心内存不足
ENOTDIR:路径名的部分内容不是目录
EPERM : 文件系统不支持文件或者目录的解除连接,也有可能是权限步允许
EROFS :文件系统只读

当文件的连接数为0的时候,并且没有任何进程打开这个文件,这个文件的存储数据才会被真正的删除。

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
int main()
{
    int fd;
    char buf[32];
    struct stat buff;
    if((fd=open("temp.txt",O_RDWR|O_CREAT|O_TRUNC,S_IRWXU))<0){
        printf("create file error!\n");
    }
    stat("temp.txt",&buff);
    printf("temp.link=%d\n",buff.st_nlink);
    link("temp.txt","test.txt");
    stat("test.txt",&buff);
    printf("after link the tem.link =%d\n",buff.st_nlink);
    if(unlink("temp.txt")<0){
        printf("unlink error !\n");
    }
    stat("temp.txt",&buff);
    printf("after unlink tem.link=%d\n",buff.st_nlink);
    if(write(fd,"temp",5)<0){
        printf("write wrror!\n");
    }
    if((lseek(fd,0,SEEK_SET))==-1){
       printf("lseek error!\n");
    }
    if((read(fd,buf,5))<0){
        printf("read error!\n");
    }
    printf("%s\n",buf);
    return 0;
}

99%的人还阅读了:

Leave a Reply