分享
 
 
 

linux 下C函数部分(16)

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

错误代码

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<sys/types.h>

#include<sys/stat.h>

main()

{

chmod(“/etc/passwd”,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);

}

chown(改变文件的所有者)

相关函数

fchown,lchown,chmod

表头文件

#include<sys/types.h>

#include<unistd.h>

定义函数

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<sys/types.h>

#include<unistd.h>

main()

{

chown(“/etc/passwd”,0,0);

}

chroot(改变根目录)

相关函数

chdir

表头文件

#include<unistd.h>

定义函数

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<unistd.h>

main()

{

chroot(“/tmp”);

chdir(“/”);

}

closedir(关闭目录)

相关函数

opendir

表头文件

#include<sys/types.h>

#include<dirent.h>

定义函数

int closedir(DIR *dir);

函数说明

closedir()关闭参数dir所指的目录流。

返回值

关闭成功则返回0,失败返回-1,错误原因存于errno 中。

错误代码

EBADF 参数dir为无效的目录流

范例

参考readir()。

fchdir(改变当前的工作目录)

相关函数

getcwd,chroot

表头文件

#include<unistd.h>

定义函数

int fchdir(int fd);

函数说明

fchdir()用来将当前的工作目录改变成以参数fd 所指的文件描述词。

返回值执

行成功则返回0,失败返回-1,errno为错误代码。

附加说明

范例

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<unistd.h>

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<sys/types.h>

#include<sys/stat.h>

定义函数

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<sys/stat.h>

#include<fcntl.h>

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<sys/types.h>

#include<unistd.h>

定义函数

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<sys/types.h>

#include<unistd.h>

#include<fcntl.h>

main()

{

int fd;

fd = open (“/etc/passwd”,O_RDONLY);

chown(fd,0,0);

close(fd);

}

fstat(由文件描述词取得文件状态)

相关函数

stat,lstat,chmod,chown,readlink,utime

表头文件

#include<sys/stat.h>

#include<unistd.h>

定义函数

int fstat(int fildes,struct stat *buf);

函数说明

fstat()用来将参数fildes所指的文件状态,复制到参数buf所指的结构中(struct stat)。Fstat()与stat()作用完全相同,不同处在于传入的参数为已打开的文件描述词。详细内容请参考stat()。

返回值

执行成功则返回0,失败返回-1,错误代码存于errno。

范例

#include<sys/stat.h>

#include<unistd.h>

#include<fcntk.h>

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<unistd.h>

定义函数

int ftruncate(int fd,off_t length);

函数说明

ftruncate()会将参数fd指定的文件大小改为参数length指定的大小。参数fd为已打开的文件描述词,而且必须是以写入模式打开的文件。如果原来的文件大小比参数length大,则超过的部分会被删去。

返回值

执行成功则返回0,失败返回-1,错误原因存于errno。

错误代码

EBADF 参数fd文件描述词为无效的或该文件已关闭。

EINVAL 参数fd 为一socket 并非文件,或是该文件并非以写入模式打开。

getcwd(取得当前的工作目录)

相关函数

get_current_dir_name,getwd,chdir

表头文件

#include<unistd.h>

定义函数

char * getcwd(char * buf,size_t size);

函数说明

getcwd()会将当前的工作目录绝对路径复制到参数buf所指的内存空间,参数size为buf的空间大小。在调用此函数时,buf所指的内存空间要足够大,若工作目录绝对路径的字符串长度超过参数size大小,则回值NULL,errno的值则为ERANGE。倘若参数buf为NULL,getcwd()会依参数size的大小自动配置内存(使用malloc()),如果参数size也为0,则getcwd()会依工作目录绝对路径的字符串程度来决定所配置的内存大小,进程可以在使用完此字符串后利用free()来释放此空间。

返回值

执行成功则将结果复制到参数buf所指的内存空间,或是返回自动配置的字符串指针。失败返回NULL,错误代码存于errno。

范例

#include<unistd.h>

main()

{

char buf[80];

getcwd(buf,sizeof(buf));

printf(“current working directory : %s\n”,buf);

}

执行

current working directory :/tmp

link(建立文件连接)

相关函数

symlink,unlink

表头文件

#include<unistd.h>

定义函数

int link (const char * oldpath,const char * newpath);

函数说明

link()以参数newpath指定的名称来建立一个新的连接(硬连接)到参数oldpath所指定的已存在文件。如果参数newpath指定的名称为一已存在的文件则不会建立连接。

返回值

成功则返回0,失败返回-1,错误原因存于errno。

附加说明

link()所建立的硬连接无法跨越不同文件系统,如果需要请改用symlink()。

错误代码

EXDEV 参数oldpath与newpath不是建立在同一文件系统。

EPERM 参数oldpath与newpath所指的文件系统不支持硬连接

EROFS 文件存在于只读文件系统内

EFAULT 参数oldpath或newpath 指针超出可存取内存空间。

ENAMETOLLONG 参数oldpath或newpath太长

ENOMEM 核心内存不足

EEXIST 参数newpath所指的文件名已存在。

EMLINK 参数oldpath所指的文件已达最大连接数目。

ELOOP 参数pathname有过多符号连接问题

ENOSPC 文件系统的剩余空间不足。

EIO I/O 存取错误。

范例

/* 建立/etc/passwd 的硬连接为pass */

#include<unistd.h>

main()

{

link(“/etc/passwd”,”pass”);

}

lstat(由文件描述词取得文件状态)

相关函数

stat,fstat,chmod,chown,readlink,utime

表头文件

#include<sys/stat.h>

#include<unistd.h>

定义函数

int lstat (const char * file_name.struct stat * buf);

函数说明

lstat()与stat()作用完全相同,都是取得参数file_name所指的文件状态,其差别在于,当文件为符号连接时,lstat()会返回该link本身的状态。详细内容请参考stat()。

返回值

执行成功则返回0,失败返回-1,错误代码存于errno。

范例

参考stat()。

opendir(打开目录)

相关函数

open,readdir,closedir,rewinddir,seekdir,telldir,scandir

表头文件

#include<sys/types.h>

#include<dirent.h>

定义函数

DIR * opendir(const char * name);

函数说明

opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下来对目录的读取和搜索都要使用此返回值。

返回值

成功则返回DIR* 型态的目录流,打开失败则返回NULL。

错误代码

EACCESS 权限不足

EMFILE 已达到进程可同时打开的文件数上限。

ENFILE 已达到系统可同时打开的文件数上限。

ENOTDIR 参数name非真正的目录

ENOENT 参数name 指定的目录不存在,或是参数name 为一空字符串。

ENOMEM 核心内存不足。

readdir(读取目录)

相关函数

open,opendir,closedir,rewinddir,seekdir,telldir,scandir

表头文件

#include<sys/types.h>

#include<dirent.h>

定义函数

struct dirent * readdir(DIR * dir);

函数说明

readdir()返回参数dir目录流的下个目录进入点。

结构dirent定义如下

struct dirent

{

ino_t d_ino;

ff_t d_off;

signed short int d_reclen;

unsigned char d_type;

har d_name[256;

};

d_ino 此目录进入点的inode

d_off 目录文件开头至此目录进入点的位移

d_reclen _name的长度,不包含NULL字符

d_type d_name 所指的文件类型

d_name 文件名

返回值

成功则返回下个目录进入点。有错误发生或读取到目录文件尾则返回NULL。

附加说明

EBADF参数dir为无效的目录流。

范例

#include<sys/types.h>

#include<dirent.h>

#include<unistd.h>

main()

{

DIR * dir;

struct dirent * ptr;

int i;

dir =opendir(“/etc/rc.d”);

while((ptr = readdir(dir))!=NULL)

{

printf(“d_name: %s\n”,ptr->d_name);

}

closedir(dir);

}

执行

d_name:.

d_name:..

d_name:init.d

d_name:rc0.d

d_name:rc1.d

d_name:rc2.d

d_name:rc3.d

d_name:rc4.d

d_name:rc5.d

d_name:rc6.d

d_name:rc

d_name:rc.local

d_name:rc.sysinit

readlink(取得符号连接所指的文件)

相关函数

stat,lstat,symlink

表头文件

#include<unistd.h>

定义函数

int readlink(const char * path ,char * buf,size_t bufsiz);

函数说明

readlink()会将参数path的符号连接内容存到参数buf所指的内存空间,返回的内容不是以NULL作字符串结尾,但会将字符串的字符数返回。若参数bufsiz小于符号连接的内容长度,过长的内容会被截断。

返回值

执行成功则传符号连接所指的文件路径字符串,失败则返回-1,错误代码存于errno。

错误代码

EACCESS 取文件时被拒绝,权限不够

EINVAL 参数bufsiz 为负数

EIO I/O 存取错误。

ELOOP 欲打开的文件有过多符号连接问题。

ENAMETOOLONG 参数path的路径名称太长

ENOENT 参数path所指定的文件不存在

ENOMEM 核心内存不足

ENOTDIR 参数path路径中的目录存在但却非真正的目录。

remove(删除文件)

相关函数

link,rename,unlink

表头文件

#include<stdio.h>

定义函数

int remove(const char * pathname);

函数说明

remove()会删除参数pathname指定的文件。如果参数pathname为一文件,则调用unlink()处理,若参数pathname为一目录,则调用rmdir()来处理。请参考unlink()与rmdir()。

返回值

成功则返回0,失败则返回-1,错误原因存于errno。

错误代码

EROFS 欲写入的文件存在于只读文件系统内

EFAULT 参数pathname指针超出可存取内存空间

ENAMETOOLONG 参数pathname太长

ENOMEM 核心内存不足

ELOOP 参数pathname有过多符号连接问题

EIO I/O 存取错误。

rename(更改文件名称或位置)

相关函数

link,unlink,symlink

表头文件

#include<stdio.h>

定义函数

int rename(const char * oldpath,const char * newpath);

函数说明

rename()会将参数oldpath 所指定的文件名称改为参数newpath所指的文件名称。若newpath所指定的文件已存在,则会被删除。

返回值

执行成功则返回0,失败返回-1,错误原因存于errno

范例

/* 设计一个DOS下的rename指令rename 旧文件名新文件名*/

#include <stdio.h>

void main(int argc,char **argv)

{

if(argc<3){

printf(“Usage: %s old_name new_name\n”,argv[0]);

return;

}

printf(“%s=>%s”,argc[1],argv[2]);

if(rename(argv[1],argv[2]<0)

printf(“error!\n”);

else

printf(“ok!\n”);

}

第一頁    上一頁    第16頁/共20頁    下一頁    最後頁
第01頁 第02頁 第03頁 第04頁 第05頁 第06頁 第07頁 第08頁 第09頁 第10頁 
第11頁 第12頁 第13頁 第14頁 第15頁 第16頁 第17頁 第18頁 第19頁 第20頁 
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有