Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7843495
  • 博文数量: 92
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 5216
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-15 17:17
文章分类

全部博文(92)

文章存档

2011年(1)

2008年(91)

我的朋友

分类: LINUX

2008-08-27 16:58:19

chdir(改变当前的工作(目录)
相关函数
 getcwd,chroot
表头文件
 #include
定义函数
 int chdir(const char * path);
函数说明
 chdir()用来将当前的工作目录改变成以参数path所指的目录。
返回值
 执行成功则返回0,失败返回-1,errno为错误代码。
范例
 #include
main()
{
chdir(“/tmp”);
printf(“current working directory: %s\n”,getcwd(NULL,NULL));
}
执行
 current working directory :/tmp
 


 
chmod(改变文件的权限)
相关函数
 fchmod,stat,open,chown
表头文件
 #include
#include
定义函数
 int chmod(const char * path,mode_t mode);
函数说明
 chmod()会依参数mode 权限来更改参数path 指定文件的权限。
参数
 mode 有下列数种组合
S_ISUID 04000 文件的(set user-id on execution)位
S_ISGID 02000 文件的(set group-id on execution)位
S_ISVTX 01000 文件的sticky位
S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限
S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限
S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限
S_IRGRP 00040 用户组具可读取权限
S_IWGRP 00020 用户组具可写入权限
S_IXGRP 00010 用户组具可执行权限
S_IROTH 00004 其他用户具可读取权限
S_IWOTH 00002 其他用户具可写入权限
S_IXOTH 00001 其他用户具可执行权限
只 有该文件的所有者或有效用户识别码为0,才可以修改该文件权限。基于系统安全,如果欲将数据写入一执行文件,而该执行文件具有S_ISUID 或S_ISGID 权限,则这两个位会被清除。如果一目录具有S_ISUID 位权限,表示在此目录下只有该文件的所有者或root可以删除该文件。
返回值
 权限改变成功返回0,失败返回-1,错误原因存于errno。
错误代码
 EPERM 进程的有效用户识别码与欲修改权限的文件拥有者不同,而且也不具root权限。
EACCESS 参数path所指定的文件无法存取。
EROFS 欲写入权限的文件存在于只读文件系统内。
EFAULT 参数path指针超出可存取内存空间。
EINVAL 参数mode不正确
ENAMETOOLONG 参数path太长
ENOENT 指定的文件不存在
ENOTDIR 参数path路径并非一目录
ENOMEM 核心内存不足
ELOOP 参数path有过多符号连接问题。
EIO I/O 存取错误
范例
 /* 将/etc/passwd 文件权限设成S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH */
#include
#include
main()
{
chmod(“/etc/passwd”,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
}
 


 
chown(改变文件的所有者)
相关函数
 fchown,lchown,chmod
表头文件
 #include
#include
定义函数
 int chown(const char * path, uid_t owner,gid_t group);
函数说明
 chown ()会将参数path指定文件的所有者变更为参数owner代表的用户,而将该文件的组变更为参数group组。如果参数owner或group为-1, 对应的所有者或组不会有所改变。root与文件所有者皆可改变文件组,但所有者必须是参数group组的成员。当root用chown()改变文件所有者 或组时,该文件若具有S_ISUID或S_ISGID权限,则会清除此权限位,此外如果具有S_ISGID权限但不具S_IXGRP位,则该文件会被强制 锁定,文件模式会保留。
返回值
 成功则返回0,失败返回-1,错误原因存于errno。
错误代码
 参考chmod()。
范例
 /* 将/etc/passwd 的所有者和组都设为root */
#include
#include
main()
{
chown(“/etc/passwd”,0,0);
}
 


 
chroot(改变根目录)
相关函数
 chdir
表头文件
 #include
定义函数
 int chroot(const char * path);
函数说明
 chroot()用来改变根目录为参数path 所指定的目录。只有超级用户才允许改变根目录,子进程将继承新的根目录。
返回值
 调用成功则返回0,失败则返-1,错误代码存于errno。
错误代码
 EPERM 权限不足,无法改变根目录。
EFAULT 参数path指针超出可存取内存空间。
ENAMETOOLONG 参数path太长。
ENOTDIR 路径中的目录存在但却非真正的目录。
EACCESS 存取目录时被拒绝
ENOMEM 核心内存不足。
ELOOP 参数path有过多符号连接问题。
EIO I/O 存取错误。
范例
 /* 将根目录改为/tmp ,并将工作目录切换至/tmp */
#include
main()
{
chroot(“/tmp”);
chdir(“/”);
}
 


 
closedir(关闭目录)
相关函数
 opendir
表头文件
 #include
#include
定义函数
 int closedir(DIR *dir);
函数说明
 closedir()关闭参数dir所指的目录流。
返回值
 关闭成功则返回0,失败返回-1,错误原因存于errno 中。
错误代码
 EBADF 参数dir为无效的目录流
范例
 参考readir()。
 


 
fchdir(改变当前的工作目录)
相关函数
 getcwd,chroot
表头文件
 #include
定义函数
 int fchdir(int fd);
函数说明
 fchdir()用来将当前的工作目录改变成以参数fd 所指的文件描述词。
返回值执
 行成功则返回0,失败返回-1,errno为错误代码。
附加说明
 
范例
 #include
#include
#include
#include
main()
{
int fd;
fd = open(“/tmp”,O_RDONLY);
fchdir(fd);
printf(“current working directory : %s \n”,getcwd(NULL,NULL));
close(fd);
}
执行
 current working directory : /tmp
 


 
fchmod(改变文件的权限)
相关函数
 chmod,stat,open,chown
表头文件
 #include
#include
定义函数
 int fchmod(int fildes,mode_t mode);
函数说明
 fchmod()会依参数mode权限来更改参数fildes所指文件的权限。参数fildes为已打开文件的文件描述词。参数mode请参考chmod()。
返回值
 权限改变成功则返回0,失败返回-1,错误原因存于errno。
错误原因
 EBADF 参数fildes为无效的文件描述词。
EPERM 进程的有效用户识别码与欲修改权限的文件所有者不同,而且也不具root权限。
EROFS 欲写入权限的文件存在于只读文件系统内。
EIO I/O 存取错误。
范例
 #include
#include
main()
{
int fd;
fd = open (“/etc/passwd”,O_RDONLY);
fchmod(fd,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
close(fd);
}
 


 
fchown(改变文件的所有者)
相关函数
 chown,lchown,chmod
表头文件
 #include
#include
定义函数
 int fchown(int fd,uid_t owner,gid_t group);
函数说明
 fchown ()会将参数fd指定文件的所有者变更为参数owner代表的用户,而将该文件的组变更为参数group组。如果参数owner或group为-1,对映 的所有者或组有所改变。参数fd 为已打开的文件描述词。当root用fchown()改变文件所有者或组时,该文件若具S_ISUID或S_ISGID权限,则会清除此权限位。
返回值
 成功则返回0,失败则返回-1,错误原因存于errno。
错误代码
 EBADF 参数fd文件描述词为无效的或该文件已关闭。
EPERM 进程的有效用户识别码与欲修改权限的文件所有者不同,而且也不具root权限,或是参数owner、group不正确。
EROFS 欲写入的文件存在于只读文件系统内。
ENOENT 指定的文件不存在
EIO I/O存取错误
范例
 #include
#include
#include
main()
{
int fd;
fd = open (“/etc/passwd”,O_RDONLY);
chown(fd,0,0);
close(fd);
}
 


 
fstat(由文件描述词取得文件状态)
相关函数
 stat,lstat,chmod,chown,readlink,utime
表头文件
 #include
#include
定义函数
 int fstat(int fildes,struct stat *buf);
函数说明
 fstat()用来将参数fildes所指的文件状态,复制到参数buf所指的结构中(struct stat)。Fstat()与stat()作用完全相同,不同处在于传入的参数为已打开的文件描述词。详细内容请参考stat()。
返回值
 执行成功则返回0,失败返回-1,错误代码存于errno。
范例
 #include
#include
#include
main()
{
struct stat buf;
int fd;
fd = open (“/etc/passwd”,O_RDONLY);
fstat(fd,&buf);
printf(“/etc/passwd file size +%d\n “,buf.st_size);
}
执行
 /etc/passwd file size = 705
 


 
ftruncate(改变文件大小)
相关函数
 open,truncate
表头文件
 #include
定义函数
 int ftruncate(int fd,off_t length);
函数说明
 ftruncate()会将参数fd指定的文件大小改为参数length指定的大小。参数fd为已打开的文件描述词,而且必须是以写入模式打开的文件。如果原来的文件大小比参数length大,则超过的部分会被删去。
返回值
 执行成功则返回0,失败返回-1,错误原因存于errno。
错误代码
 EBADF 参数fd文件描述词为无效的或该文件已关闭。
EINVAL 参数fd 为一socket 并非文件,或是该文件并非以写入模式打开。
阅读(1759) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~