Linux/UNIX之文件和文件夹(2)
文件和文件夹(2)
link、ulink、remove和rename函数
#include <unistd.h>
int link(const char *oldpath, const char*newpath);
int unlink(const char *pathname);
#include <stdio.h>
int remove(const char *pathname);
int rename(const char *oldpath, const char*newpath);
link函数用于创建一个指向现有文件的硬链接。
unlink函数用于删除一个现有的文件夹项。假设一个文件的链接数降低到0,而且没有进程打开它。这个文件就被删除。实际情况是,文件夹项总是被先删除,但文件所占用的孔家要等到最后一个进程关闭它之后才会被系统回收。
remove函数能够解除对一个文件或文件夹的链接。对于文件。其功能与unlink同样。对于文件夹,其功能与rmdir同样。
rename更改文件或文件夹的名字。
符号链接
符号链接又称为链接,是指向文件的间接指针。
引入符号链接的原因是为了避免硬链接的一些限制:
1. 硬链接通常要求链接和文件位于同一问价系统中
2. 仅仅有超级用于才干创建指向文件夹的硬链接
当引用以名字引用文件的函数时。应当了解该函数是否尾随链接到达它所链接的文件。
下面是硬链接和符号链接之间的差别:
硬链接:仅仅能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为 inode)。当您移动或删除原始文件时,硬链接不会被破坏,由于它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不须要用户有訪问原始文件的权限,也不会显示原始文件的位置。这样有助于文件的安全。假设您删除的文件有对应的硬链接,那么这个文件依旧会保留,直到全部对它的引用都被删除。
符号链接:是一个指针,指向文件在文件系统中的位置。符号链接能够跨文件系统,甚至能够指向远程文件系统中的文件。符号链接仅仅是指明了原始文件的位置。用户须要对原始文件的位置有訪问权限才干够使用链接。假设原始文件被删除。全部指向它的符号链接也就都被破坏了。
它们会指向文件系统中并不存在的一个位置。两种链接都能够通过命令 ln 来创建。ln 默认创建的是硬链接。使用 -s 开关能够创建符号链接。
符号链接与硬链接有什么差别?
简单的说:硬连接记录的是目标的 inode,符号连接记录的是目标的 path。
symlink和readlink函数
#include <unistd.h>
int symlink(const char *oldpath, const char*newpath);
ssize_t readlink(const char *path, char*buf, size_t bufsiz);
symlink创建一个符号链接。
该函数创建一个指向oldpath的新文件夹项newpath,在创建符号连接时,并不要求oldpath已经存在。而且oldpath和newpath并不须要位于同一文件系统中。
由于open函数尾随符号链接,所以须要一种方法打开该链接本身。并读该链接中的名字。readlink提供这样的功能。此函数成功运行,返回读到的字节数。在buf中返回符号的内容不以null字符终止。综合了open、read和close的全部操作。
文件的时间
对每一个文件都保持有三个时间字段
st_atime 文件数据的最后訪问时间
st_mtime 文件数据的最后改动时间
st_ctime i节点状态的最后更改时间
改动时间和更改状态时间之间的差别:改动时间时文件内容最后一次被改动的时间。
更改状态时间是该文件的i节点最后一次被改动的时间。
系统不保存对i节点的最后一次訪问时间,所以access和stat等函数并不更改这三个时间中的不论什么一个。
ls命令按这三个时间值中的一个排序进行显示。按系统默认按文件的改动时间先后排序。-u选项使其按訪问时间顺序排序,-c选项使其按更改状态时间排序。
utime函数
#include <sys/types.h>
#include <utime.h>
int utime(const char *filename, const structutimbuf *times);
utime能够更改一个文件的訪问和改动时间。
The utimbuf structure is:
struct utimbuf {
time_t actime; /* access time */
time_t modtime; /* modification time */
};
mkdir和rmdir函数
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_tmode);
mkdir用于创建一个新的空文件夹。所指定的文件訪问权限mode有进程的文件模式创建屏蔽字改动。
#include <unistd.h>
int rmdir(const char *pathname);
rmdir删除一个空文件夹。
读文件夹
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
opendir打开一个文件夹并建立一个文件夹流,成功返回DIR指针的结构指针。该指针用于读取文件夹数据项,失败返回空指针。
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
该函数返回一个指针,指针指向的结构里保存着文件夹流dirp中的下一个文件夹项的有关资料。
后序的readdir调用将返回后序的文件夹项。
调用失败返货NULL。
struct dirent结构包括的文件夹数据项内容包括下面部分:
ino_t d_ino: 文件的inode节点号
char d_name[]: 文件的名字
#include <sys/types.h>
#include <dirent.h>
int close(int fd);
该函数关闭一个文件夹流并释放与之关联的资源。
成功返回0,失败返回-1。
include <dirent.h>
long telldir(DIR *dirp);
该函数的返回值记录一个文件夹流里的当前位置。
#include <dirent.h>
void seekdir(DIR *dirp, long offset);
该函数设置文件夹流dirp的文件夹项指针。
DIR结构是一个内部结构,上述函数用这个内部结构保存当前正被读的文件夹的有信息。
chdir、fchdir和getcwd函数
#include <unistd.h>
int chdir(const char *path);
int fchdir(int fd);
程序能够像用户在文件系统里漫游那样来游览文件夹。
就像我们在shell里使用cd命令来切换文件夹一样,在程序里则能够使用chdir或fchdir系统调用。
#include <unistd.h>
char *getcwd(char *buf, size_t size);
getcwd函数把当前文件夹的名字写到给定缓冲区buf里。假设文件夹的名字超出了參数size给出的缓冲区长度,它就返回NULL。假设成功,它返回指针buf。
Linux/UNIX之文件和文件夹(2)的更多相关文章
- 在linux/unix中查找大文件
在linux/unix中查找大文件,如查找大于100M文件的位置路径,查找等于10M文件的位置路径等等,下面就介绍几个实现快速查找的命令: 1. 查找指定目录下所有大于100M的文件,命令为 find ...
- Linux/UNIX编程如何保证文件落盘
本文转载自Linux/UNIX编程如何保证文件落盘 导语 我们编写程序write数据到文件中时,其实数据不会立马写入磁盘,而是会经过层层缓存.每层缓存都有自己的刷新时机,每层缓存都刷新后才会写入磁盘. ...
- LINUX/UNIX找回删除的文件
当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹.管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志.有时可以通过lsof来恢复这些 ...
- Linux权限之/etc/passwd文件
在Linux /etc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性.系统管理员经常会接触到这个文件的修改以完成对用户的管理工作.这个文件对所有用户都是可读的.但是L ...
- Linux/UNIX编程:使用C语言实现简单的 ls 命令
刚好把 Linux/UNIX 编程中的文件和IO部分学完了,就想编写个 ls 命令练习一下,本以为很简单,调用个 stat 就完事了,没想到前前后后弄了七八个小时,90%的时间都用在格式化(像 ls ...
- 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)
<Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...
- Linux chmod命令修改文件与文件夹权限命令代码
在Unix和Linux的各种操作系统下,每个文件(文件夹也被看作是文件)都按读.写.运行设定权限. 以下转自:http://www.codeceo.com/article/linux-chmod-co ...
- linux:文件及文件夹管理
http://blog.csdn.net/pipisorry/article/details/39854265 查看用户的信息 pika:~$id pikauid=1000(pika) gid=100 ...
- linux find 命令查找文件和文件夹
查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) -name 查找关键字 -print 详解: find命令用来在指定目录下查找文件.任 ...
随机推荐
- (转)iOS 最佳实践
本文转自http://www.jianshu.com/p/b0bf2368fb95 感谢作者和译者 iOS最佳实践 iOS最佳实践 译者注 本文翻译自 futurice 公司的 iOS Good Pr ...
- ubuntu14.04安装搜狗拼音以及Google-chrome
安装搜狗拼音 1.进入https://pinyin.sogou.com/linux/选择合适版本下载: 2.直接打开deb包进行安装: 3.安装完成后,打开系统设置中语言支持选项,在键盘输入方式系统中 ...
- 经典DP问题--poj1088滑雪
Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
- SpringData及SpringData JPA的理解和简单应用
SpringData是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得 数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服务.此外,它还支持 基于关系型数据库的数据 ...
- Linux下Tomcat的安装和部署
一.安装tomcat 1.下载tomcat安装包apache-tomcat-7.0.62.tar.gz和jdk1.7 2.安装tomcat,将apache-tomcat-7.0.62.tar.gz复制 ...
- Leetcode 329.矩阵中的最长递增路径
矩阵中的最长递增路径 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: n ...
- 在windows下安装flex和bison、GCC
学习Stellar-core 需要依赖项flex .bison .gcc三个依赖项 下载得网址:链接: https://pan.baidu.com/s/1mitCLcs 密码: 3jaj 通过 w ...
- IntelliJ IDEA 代码提示快捷键
1.写代码时用Alt-Insert(Code|Generate…)可以创建类里面任何字段的getter与setter方法. mac版 是ctrl+enter 2.CodeCompletion(代码完成 ...
- iOS学习笔记08-Quartz2D绘图
一.Quartz2D简单介绍 在iOS中常用的绘图框架就是Quartz2D,Quartz2D是Core Graphics框架的一部分,我们日常开发使用的所有UIKit组件都是由Core Graphic ...
- iOS学习笔记06-手势识别
一.UIGestureRecognizer简单介绍 我们已经学习了触摸事件处理,但触摸事件处理起来很麻烦,每个触摸事件处理都需要实现3个touches方法,比较繁琐,实际上我们可以使用更加简单的触摸事 ...