1 access 函数
作用
测试指定文件是否拥有某种权限
头文件:unistd.h
原型
int access(const char *pathname, int mode);
参数
pathname –> 文件名
mode –> 权限类别
R_OK 是否有读权限
W_OK 是否有写权限
X_OK 是否有执行权限
F_OK 测试一个文件是否存在
返回值
0 –> 所有欲查核的权限都通过了检查
-1 –> 有权限被禁止
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
int main(int argc,char *argv[])
{
if(argc<2)
{
printf("no file,\n");
exit(1);
}
int ret = access(argv[1],W_OK);
if(ret == -1)
{
perror("access");
exit(1);
}
printf("you can write this file.\n");
return 0;
}
2 chmod函数
作用
改变文件的权限
原型
int chmod( const char *filename, int pmode );
参数
filename –> 文件名
pmode –> 权限
必须是一个8进制数
返回值
0 –> 改变成功
-1 –> 失败
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
int main(int argc,char *argv[])
{
if(argc<2)
{
printf("no file,\n");
exit(1);
}
int ret = chmod(argv[1],0777);
if(ret == -1)
{
perror("chmod");
exit(1);
}
printf("you can chmod this file.\n");
return 0;
}
3 chown函数
作用
改变文件的所有者
原型
int chown(const char *path, uid_t owner, gid_t group);
返回值
0 –> 成功
-1 –> 失败
4 truncate函数
表头文件:#include <unistd.h>
原型
int truncate(const char *path, off_t length);
path --> 文件路径
length --> 指定的文件大小
**注释:
(1)如果当前文件的大小为100字节。指定的length为20字节。那么执行结果是这个文件只剩20字节,其他80字节会被删除。
(2)如果当前文件大小为100字节,指定length为300字节。那么执行结果是这个文件被拓展了。
返回值
0 --> 执行成功
-1 --> 执行失败
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
int main(int argc,char *argv[])
{
if(argc<2)
{
printf("no file,\n");
exit(1);
}
int ret = truncate(argv[1],17);
if(ret == -1)
{
perror("truncate");
exit(1);
}
printf("%s has been truncated.\n",argv[1]);
return 0;
}
5 链接
(1)link函数
作用
创建一个硬链接可以达到与“ln ”命令一样的效果。
原型
int link(const char *oldpath, const char *newpath);
(2)symlink 函数,函数形式与link一样
作用:创建一个软连接,可以达到与“ln -s ”命令一样的效果。
(3)readlink 函数
原型 ssize_t readlink(const char *path, char *buf, size_t bufsiz);
作用:读软连接对应的文件名,不是读内容
(4)unlink 函数
作用
删除一个文件的目录项并减少它的链接数,若成功则返回0,否则返回-1,错误原因存于errno。
如果想通过调用这个函数来成功删除文件,你就必须拥有这个文件的所属目录的写和执行权限。
原型:
int unlink(const char * pathname);
使用
1. 如果是符号链接,删除符号链接
2. 如果是硬链接,硬链接数减1,当减为0时,释放数据块和inode
3. 如果文件硬链接数为0,但有进程已打开该文件,并持有文件描述符,则等该进程关闭该文件时,kernel才真正去删除该文件利用该特性创建临时文件,先open或creat创建一个文件,马上unlink此文件
int main(int argc,char *argv[])
{
if(argc<2)
{
printf(“no file,\n”);
exit(1);
}
int fd = open(argv[1],O_RDWR|O_CREAT,0777);//***创建一个临时文件***
if(fd == -1)
{
perror("error");
exit(1);
}
int ret = unlink(argv[1]);//**删除文件,但由于此时文件是打开的,不能删除掉**
if(ret == -1)
{
perror("unlink");
exit(1);
}
write(fd,"this is my test\n",100);//写文件
lseek(fd,0,SEEK_SET);//**将文件指针复位**
char buf[100]={0};
read(fd,buf,sizeof(buf));//读文件
printf("%s\n",buf);
close(fd);//**关闭文件。此时临时文件会被unlink删除。**
return 0;
}