分享
 
 
 

linux 下C函数部分(13)

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

函数说明

sprintf()会根据参数format字符串来转换并格式化数据,然后将结果复制到参数str所指的字符串数组,直到出现字符串结束(’\0’)为止。关于参数format字符串的格式请参考printf()。

返回值

成功则返回参数str字符串长度,失败则返回-1,错误原因存于errno中。

附加说明

使用此函数得留意堆栈溢出,或改用snprintf()。

范例

#include<stdio.h>

main()

{

char * a=”This is string A!”;

char buf[80];

sprintf(buf,”>>> %s<<<\n”,a);

printf(“%s”.buf);

}

执行

>>>This is string A!<<<

sscanf(格式化字符串输入)

相关函数

scanf,fscanf

表头文件

#include<stdio.h>

定义函数

int sscanf (const char *str,const char * format,........);

函数说明

sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。

返回值

成功则返回参数数目,失败则返回-1,错误原因存于errno中。

范例

#include<stdio.h>

main()

{

int i;

unsigned int j;

char input[ ]=”10 0x1b aaaaaaaa bbbbbbbb”;

char s[5];

sscanf(input,”%d %x %5[a-z] %*s %f”,&i,&j,s,s);

printf(“%d %d %s\n”,i,j,s);

}

执行

10 27 aaaaa

vfprintf(格式化输出数据至文件)

相关函数

printf,fscanf,fprintf

表头文件

#include<stdio.h>

#include<stdarg.h>

定义函数

int vfprintf(FILE *stream,const char * format,va_list ap);

函数说明

vfprintf()会根据参数format字符串来转换并格式化数据,然后将结果输出到参数stream指定的文件中,直到出现字符串结束(’\0’)为止。关于参数format字符串的格式请参考printf()。va_list用法请参考附录C或vprintf()范例。

返回值

成功则返回实际输出的字符数,失败则返回-1,错误原因存于errno中。

范例

参考fprintf()及vprintf()。

vfscanf(格式化字符串输入)

相关函数

scanf,sscanf,fscanf

表头文件

#include<stdio.h>

定义函数

int vfscanf(FILE * stream,const char * format ,va_list ap);

函数说明

vfscanf()会自参数stream 的文件流中读取字符串,再根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。va_list用法请参考附录C 或vprintf()。

返回值

成功则返回参数数目,失败则返回-1,错误原因存于errno中。

范例

参考fscanf()及vprintf()。

vprintf(格式化输出数据)

相关函数

printf,vfprintf,vsprintf

表头文件

#include<stdio.h>

#include<stdarg.h>

定义函数

int vprintf(const char * format,va_list ap);

函数说明

vprintf()作用和printf()相同,参数format格式也相同。va_list为不定个数的参数列,用法及范例请参考附录C。

返回值

成功则返回实际输出的字符数,失败则返回-1,错误原因存于errno中。

范例

#include<stdio.h>

#include<stdarg.h>

int my_printf( const char *format,……)

{

va_list ap;

int retval;

va_start(ap,format);

printf(“my_printf( ):”);

retval = vprintf(format,ap);

va_end(ap);

return retval;

}

main()

{

int i = 150,j = -100;

double k = 3.14159;

my_printf(“%d %f %x\n”,j,k,i);

my_printf(“%2d %*d\n”,i,2,i);

}

执行

my_printf() : -100 3.14159 96

my_printf() : 150 150

vscanf(格式化字符串输入)

相关函数

vsscanf,vfscanf

表头文件

#include<stdio.h>

#include<stdarg.h>

定义函数

int vscanf( const char * format,va_list ap);

函数说明

vscanf()会将输入的数据根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。va_list用法请参考附录C或vprintf()范例。

返回值

成功则返回参数数目,失败则返回-1,错误原因存于errno中。

范例

请参考scanf()及vprintf()。

vsprintf(格式化字符串复制)

相关函数

vnsprintf,vprintf,snprintf

表头文件

#include<stdio.h>

定义函数

int vsprintf( char * str,const char * format,va_list ap);

函数说明

vsprintf()会根据参数format字符串来转换并格式化数据,然后将结果复制到参数str所指的字符串数组,直到出现字符串结束(’\0’)为止。关于参数format字符串的格式请参考printf()。va_list用法请参考附录C或vprintf()范例。

返回值

成功则返回参数str字符串长度,失败则返回-1,错误原因存于errno中。

范例

请参考vprintf()及vsprintf()。

vsscanf(格式化字符串输入)

相关函数

vscanf,vfscanf

表头文件

#include<stdio.h>

定义函数

int vsscanf(const char * str,const char * format,va_list ap);

函数说明

vsscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考附录C 或vprintf()范例。

返回值

成功则返回参数数目,失败则返回-1,错误原因存于errno中。

范例

请参考sscanf()及vprintf()。

access(判断是否具有存取文件的权限)

相关函数

stat,open,chmod,chown,setuid,setgid

表头文件

#include<unistd.h>

定义函数

int access(const char * pathname,int mode);

函数说明

access()会检查是否可以读/写某一已存在的文件。参数mode有几种情况组合,R_OK,W_OK,X_OK 和F_OK。R_OK,W_OK与X_OK用来检查文件是否具有读取、写入和执行的权限。F_OK则是用来判断该文件是否存在。由于access()只作权限的核查,并不理会文件形态或文件内容,因此,如果一目录表示为“可写入”,表示可以在该目录中建立新文件等操作,而非意味此目录可以被当做文件处理。例如,你会发现DOS的文件都具有“可执行”权限,但用execve()执行时则会失败。

返回值

若所有欲查核的权限都通过了检查则返回0值,表示成功,只要有一权限被禁止则返回-1。

错误代码

EACCESS 参数pathname 所指定的文件不符合所要求测试的权限。

EROFS 欲测试写入权限的文件存在于只读文件系统内。

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

EINVAL 参数mode 不正确。

ENAMETOOLONG 参数pathname太长。

ENOTDIR 参数pathname为一目录。

ENOMEM 核心内存不足

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

EIO I/O 存取错误。

附加说明

使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。

范例

/* 判断是否允许读取/etc/passwd */

#include<unistd.h>

int main()

{

if (access(“/etc/passwd”,R_OK) = =0)

printf(“/etc/passwd can be read\n”);

}

执行

/etc/passwd can be read

alphasort(依字母顺序排序目录结构)

相关函数

scandir,qsort

表头文件

#include<dirent.h>

定义函数

int alphasort(const struct dirent **a,const struct dirent **b);

函数说明

alphasort()为scandir()最后调用qsort()函数时传给qsort()作为判断的函数,详细说明请参考scandir()及qsort()。

返回值

参考qsort()。

范例

/* 读取/目录下所有的目录结构,并依字母顺序排列*/

main()

{

struct dirent **namelist;

int i,total;

total = scandir(“/”,&namelist ,0,alphasort);

if(total <0)

perror(“scandir”);

else{

for(i=0;i<total;i++)

printf(“%s\n”,namelist[i]->d_name);

printf(“total = %d\n”,total);

}

}

执行

..

.gnome

.gnome_private

ErrorLog

Weblog

bin

boot

dev

dosc

dosd

etc

home

lib

lost+found

misc

mnt

opt

proc

root

sbin

tmp

usr

var

total = 24

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

相关函数

getcwd,chroot

表头文件

#include<unistd.h>

定义函数

int chdir(const char * path);

函数说明

chdir()用来将当前的工作目录改变成以参数path所指的目录。

返回值

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

范例

#include<unistd.h>

main()

{

chdir(“/tmp”);

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

}

执行

current working directory :/tmp

chmod(改变文件的权限)

相关函数

fchmod,stat,open,chown

表头文件

#include<sys/types.h>

#include<sys/stat.h>

定义函数

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可以删除该文件。

<div align="right"

access(判断是否具有存取文件的权限)

相关函数

stat,open,chmod,chown,setuid,setgid

表头文件

#include<unistd.h>

定义函数

int access(const char * pathname,int mode);

函数说明

access()会检查是否可以读/写某一已存在的文件。参数mode有几种情况组合,R_OK,W_OK,X_OK 和F_OK。R_OK,W_OK与X_OK用来检查文件是否具有读取、写入和执行的权限。F_OK则是用来判断该文件是否存在。由于access()只作权限的核查,并不理会文件形态或文件内容,因此,如果一目录表示为“可写入”,表示可以在该目录中建立新文件等操作,而非意味此目录可以被当做文件处理。例如,你会发现DOS的文件都具有“可执行”权限,但用execve()执行时则会失败。

返回值

若所有欲查核的权限都通过了检查则返回0值,表示成功,只要有一权限被禁止则返回-1。

错误代码

EACCESS 参数pathname 所指定的文件不符合所要求测试的权限。

EROFS 欲测试写入权限的文件存在于只读文件系统内。

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

EINVAL 参数mode 不正确。

ENAMETOOLONG 参数pathname太长。

ENOTDIR 参数pathname为一目录。

ENOMEM 核心内存不足

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

EIO I/O 存取错误。

附加说明

使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。

范例

/* 判断是否允许读取/etc/passwd */

#include<unistd.h>

int main()

{

if (access(“/etc/passwd”,R_OK) = =0)

printf(“/etc/passwd can be read\n”);

}

执行

/etc/passwd can be read

alphasort(依字母顺序排序目录结构)

相关函数

scandir,qsort

表头文件

#include<dirent.h>

定义函数

int alphasort(const struct dirent **a,const struct dirent **b);

函数说明

alphasort()为scandir()最后调用qsort()函数时传给qsort()作为判断的函数,详细说明请参考scandir()及qsort()。

返回值

参考qsort()。

范例

/* 读取/目录下所有的目录结构,并依字母顺序排列*/

main()

{

struct dirent **namelist;

int i,total;

total = scandir(“/”,&namelist ,0,alphasort);

if(total <0)

perror(“scandir”);

else{

for(i=0;i<total;i++)

printf(“%s\n”,namelist[i]->d_name);

printf(“total = %d\n”,total);

}

}

执行

..

.gnome

.gnome_private

ErrorLog

Weblog

bin

boot

dev

dosc

dosd

etc

home

lib

lost+found

misc

mnt

opt

proc

root

sbin

tmp

usr

var

total = 24

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

相关函数

getcwd,chroot

表头文件

#include<unistd.h>

定义函数

int chdir(const char * path);

函数说明

chdir()用来将当前的工作目录改变成以参数path所指的目录。

返回值

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

范例

#include<unistd.h>

main()

{

chdir(“/tmp”);

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

}

执行

current working directory :/tmp

chmod(改变文件的权限)

相关函数

fchmod,stat,open,chown

表头文件

#include<sys/types.h>

#include<sys/stat.h>

定义函数

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

#include<sys/stat.h>

main()

{

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

}

第一頁    上一頁    第13頁/共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- 王朝網路 版權所有