打印本文 打印本文 关闭窗口 关闭窗口
Linux C 函数参考(文件权限控制)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2828  更新时间:2009/4/22 23:08:52  文章录入:mintao  责任编辑:mintao
范例 #include<sys/stat.h>
#include<unistd.h>
mian()
{
struct stat buf;
stat (“/etc/passwd”,&buf);
printf(“/etc/passwd file size = %d \n”,buf.st_size);
}
执行 /etc/passwd file size = 705
 


symlink(建立文件符号连接)
相关函数 link,unlink
表头文件 #include<unistd.h>
定义函数 int symlink( const char * oldpath,const char * newpath);
函数说明 symlink()以参数newpath指定的名称来建立一个新的连接(符号连接)到参数oldpath所指定的已存在文件。参数oldpath指定的文件不一定要存在,如果参数newpath指定的名称为一已存在的文件则不会建立连接。
返回值 成功则返回0,失败返回-1,错误原因存于errno。
错误代码 EPERM 参数oldpath与newpath所指的文件系统不支持符号连接
EROFS 欲测试写入权限的文件存在于只读文件系统内
EFAULT 参数oldpath或newpath指针超出可存取内存空间。
ENAMETOOLONG 参数oldpath或newpath太长
ENOMEM 核心内存不足
EEXIST 参数newpath所指的文件名已存在。
EMLINK 参数oldpath所指的文件已达到最大连接数目
ELOOP 参数pathname有过多符号连接问题
ENOSPC 文件系统的剩余空间不足
EIO I/O 存取错误
范例 #include<unistd.h>
main()
{
symlink(“/etc/passwd”,”pass”);
}
 


telldir(取得目录流的读取位置)
相关函数 open,opendir,closedir,rewinddir,seekdir,readdir,scandir
表头文件 #include<dirent.h>
定义函数 off_t telldir(DIR *dir);
函数说明 telldir()返回参数dir目录流目前的读取位置。此返回值代表距离目录文件开头的偏移量返回值返回下个读取位置,有错误发生时返回-1。
错误代码 EBADF参数dir为无效的目录流。
范例 #include<sys/types.h>
#include<dirent.h>
#include<unistd.h>
main()
{
DIR *dir;
struct dirent *ptr;
int offset;
dir = opendir(“/etc/rc.d”);
while((ptr = readdir(dir))!=NULL)
{
offset = telldir (dir);
printf(“d_name : %s offset :%d\n”, ptr->d_name,offset);
}
closedir(dir);
}
执行 d_name : . offset :12
d_name : .. offset:24
d_name : init.d offset 40
d_name : rc0.d offset :56
d_name :rc1.d offset :72
d_name:rc2.d offset :88
d_name:rc3.d offset 104
d_name:rc4.d offset:120
d_name:rc5.d offset:136
d_name:rc6.d offset:152
d_name:rc offset 164
d_name:rc.local offset :180
d_name:rc.sysinit offset :4096
 


truncate(改变文件大小)
相关函数 open,ftruncate
表头文件 #include<unistd.h>
定义函数 int truncate(const char * path,off_t length);
函数说明 truncate()会将参数path 指定的文件大小改为参数length 指定的大小。如果原来的文件大小比参数length大,则超过的部分会被删去。
返回值 执行成功则返回0,失败返回-1,错误原因存于errno。
错误代码 EACCESS 参数path所指定的文件无法存取。
EROFS 欲写入的文件存在于只读文件系统内
EFAULT 参数path指针超出可存取内存空间
EINVAL 参数path包含不合法字符
ENAMETOOLONG 参数path太长
ENOTDIR 参数path路径并非一目录
EISDIR 参数path 指向一目录
ETXTBUSY 参数path所指的文件为共享程序,而且正被执行中
ELOOP 参数path’有过多符号连接问题
EIO I/O 存取错误。
 


umask(设置建立新文件时的权限遮罩)
相关函数 creat,open
表头文件 #include<sys/types.h>
#include<sys/stat.h>
定义函数 mode_t umask(mode_t mask);
函数说明 umask()会将系统umask值设成参数mask&0777后的值,然后将先前的umask值返回。在使用open()建立新文件时,该参数mode并非真正建立文件的权限,而是(mode&~umask)的权限值。例如,在建立文件时指定文件权限为0666,通常umask值默认为022,则该文件的真正权限则为0666&~022=0644,也就是rw-r--r--返回值此调用不会有错误值返回。返回值为原先系统的umask值。
 


unlink(删除文件)
相关函数 link,rename,remove
表头文件 #include<unistd.h>
定义函数 int unlink(const char * pathname);
函数说明 unlink()会删除参数pathname指定的文件。如果该文件名为最后连接点,但有其他进程打开了此文件,则在所有关于此文件的文件描述词皆关闭后才会删除。如果参数pathname为一符号连接,则此连接会被删除。
返回值 成功则返回0,失败返回-1,错误原因存于errno
错误代码 EROFS 文件存在于只读文件系统内
EFAULT 参数pathname指针超出可存取内存空间
ENAMETOOLONG 参数pathname太长
ENOMEM 核心内存不足
ELOOP 参数pathname 有过多符号连接问题
EIO I/O 存取错误
 


utime(修改文件的存取时间和更改时间)
相关函数 utimes,stat
表头文件 #include<sys/types.h>
#include<utime.h>
定义函数 int utime(const char * filename,struct utimbuf * buf);
函数说明 utime()用来修改参数filename文件所属的inode存取时间。
结构utimbuf定义如下
struct utimbuf{
time_t actime;
time_t modtime;
};
返回值 如果参数buf为空指针(NULL),则该文件的存取时间和更改时间全部会设为目前时间。
执行成功则返回0,失败返回-1,错误代码存于errno。
错误代码 EACCESS 存取文件时被拒绝,权限不足
ENOENT 指定的文件不存在。
 


utimes(修改文件的存取时间和更改时间)
相关函数 utime,stat
表头文件 #include<sys/types.h>
#include<utime.h>
定义函数 int utimes(char * filename.struct timeval *tvp);
函数说明 utimes()用来修改参数filename文件所属的inode存取时间和修改时间。
结构timeval定义如下
struct timeval {
long tv_sec;
long tv_usec; /* 微妙*/
};
返回值 参数tvp 指向两个timeval 结构空间,和utime()使用的utimebuf结构比较,tvp[0].tc_sec 则为utimbuf.actime,tvp]1].tv_sec 为utimbuf.modtime。
执行成功则返回0。失败返回-1,错误代码存于errno。
错误代码 EACCESS 存取文件时被拒绝,权限不足
ENOENT 指定的文件不存在
 

上一页  [1] [2] [3] [4] 

打印本文 打印本文 关闭窗口 关闭窗口