文件操作之特殊文件操作

四、特殊文件操作

在linux系统中,所谓特殊文件,就是指普通文件以外的其他文件,除了普通文件外,还有其他三类文件:设备文件,目录文件,链接文件,管道文件!在这一节里,我们将学习以上所述的,区别于普通文件的操作——特殊文件操作。

1、目录文件操作

与文件目录相关的系统调用有mkdir,opendir,closedir ,readir,scandir等:

mkdir函数说明:创建目录文件
#include <sys/types.h>
#include <sys/stat.h>
int mkdir(const char* pathname,modet_ mode);
pathname:目录名。mode目录权限
函数返回:成功返回0,失败返回-1.


rmdir 函数说明:删除目录文件
#include <unistd.h>
int rmdir(const char* pathname);
pathname:目录名
函数返回:成功返回0,失败返回-1.

opendir函数说明:打开目录文件
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char* name);
打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下来对目录的读取和搜索都要使用此返回值。
函数返回:成功返回DIR*形态的目录流指针,打开失败则返回空。

readdir函数说明:读取该目录
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
struct dirent* readdir(DIR * dir);
dir:被打开的文件目录流指针。
返回返回值:返回一个dirent的结构体。此结构体定义如下:
struct dirent
{
long d_ino;  //索引节点号
off_t d_off;  //在目录文件中的偏移
 unsigned short d_reclen; //文件目录的长度
  char d_name [NAME_MAX+1]; //文件目录名 
 }

closedir函数说明:关闭目录文件
#include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dir);
dir:被打开的文件目录流指针。
函数返回:成功返回0,打开失败则返回-1。

chdir函数说明:改变当前的工作目录到path指定的路径。

#include <unistd.h>
int chdir (const char *path);
path,指定当前工作目录的路径。
返回值:成功,返回0;失败,返回-1,同时errno置位。

getcwd函数说明:获取当前工作目录的绝对路径。

#include <unistd.h
char * getcwd (char *buf,size_t size);
buf:存放当前工作目录的缓冲区。
size:buf的长度。
返回值:成功,返回指向buf的指针,如果目录名字长度超出了size,则返回NULL。

2、衔接文件操作

衔接文件有点像windows系统中的快捷方式,但是又不完全一样。Linux系统中的链接有两种方式:软链接和硬链接。
(1)、软链接文件
软连接又叫符号链接,这个文件包含了另一个文件的路径名,可以是任意文件或目录,可以链接不同文件系统的文件的路径名。
symlink系统调用说明:建立软链接
#include <unistd.h>
int symlink(const char* oldpath , const char* newpath);
参数newpath:衔接的名称
参数 oldpath:已存在文件路径和文件名
函数返回:成功返回0,失败返回-1.
备注:参数oldpath指定的文件一定要存在,否则无法建立有效的连接!newpath存在则会建立链接失败。

(2)、硬链接文件:
硬链接文件大体上和软连接执行的效果差不多,但是硬链接不允许给目录建立链接并且不能跨系统。
link系统调用:建立硬链接
#include <unistd.h>
int link(const char* oldpath , const char* newpath);
参数newpath:衔接的名称
参数 oldpath:已存在文件路径和文件名
函数返回:成功返回0,失败返回-1.

(3)、unlink系统调用
从文件系统删除一个名字,如果这个名字是一个文件的最后一个连接,并且没有进程打开它,则这个文件被删除,空间被释放。如果这个名字是一个文件的最后一个连接,但是有其他进程打开了这个文件,那么这个文件就会一直保持存在,直到最后一个文件描述符被关闭。如果这个名字关联到一个符号连接,则这个连接被删除。如果这个名字关联到一个socket,fifo或者设备,那么这个名字被删除,但是使用这个对象的进程可以继续使用它。
#include <unistd.h>
int unlink (const char *path);
path:文件路径
返回值:成功,返回0;失败,返回-1,同时errno置位。
3、文件权限相关函数

(1)、chmod系统调用:改变文件或目录的访问权限。

#include<sys/stat.h>

int chmod(const char *path, mode_t mode):

path参数指定的文件,被修改为具有mode参数给给出的访问权限。

返回值:成功,返回0;失败,返回-1,同时errno置位。

(2)、chown系统调用:改变文件的所有者和组。

#include<sys/stat.h>

#include<unistd.h>

int chown(const char *path, uid_t owner, gid_t group);

path,文件路径
uid_t,用户ID
gid_t,组ID

这个调用使用的是用户的ID和组ID的数字值(通过getuid和getgid嗲用获得)和一个用于限定谁可以修改文件属主的系统值。

返回值:成功,返回0;失败,返回-1,同时errno置位。

4、 文件时间相关函数

点击打开链接http://blog.csdn.net/water_cow/article/details/7521567

相关函数参考此博文。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值