3、应用层常用lib函数使用说明
1、mmap函数
void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);
int stat(const char *path, struct stat *buf);
int fstat(int filedes, struct stat *buf);int lstat(const char *path, struct stat *buf);
参数:
path:文件路径名。
filedes:文件描述词。
buf:保存文件信息的结构体
返回说明:
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EBADF: 文件描述词无效
EFAULT: 地址空间不可访问
ELOOP: 遍历路径时遇到太多的符号连接
ENAMETOOLONG:文件路径名太长
ENOENT:路径名的部分组件不存在,或路径名是空字串
ENOMEM:内存不足
ENOTDIR:路径名的部分组件不是目录
下面放大的部分是他们的区别:
fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的是 一个“文件描述符”,而另外两个则直接接受“文件全路径”。文件描述符是需要我们用open系统调用后才能得到的,而文件全路经直接写就可以了。
stat和lstat的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的
3、snprintf()函数
snprintf()函数用于将格式化的数据写入字符串,其原型为:
int snprintf(char *str, int n, char * format [, argument, ...]);
【参数】str为要写入的字符串;n为要写入的字符的最大数目,超过n会被截断;format为格式化字符串,与printf()函数相同;argument为变量。
【返回值】成功则返回参数str 字符串长度,失败则返回-1,错误原因存于errno 中。
snprintf()可以认为是sprintf()的升级版,比sprintf()多了一个参数,能够控制要写入的字符串的长度,更加安全,只要稍加留意,不会造成缓冲区的溢出。
4、sscanf 读取格式化的字符串中的数据。
sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
sscanf("1 2 3","%d %d %d",buf1, buf2, buf3); 成功调用返回值为3,即buf1,buf2,buf3均成功转换。
5、strlen
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。
6、system()
通过system可以执行指令,把指令字符串放入buf中,system(buf)来执行,buf是指针
7、readlink()
通过readlink可以读取一个链接文件所指向的真实路径
8、strstr()(strcasestr在查找的时候忽略大小写)
原型char *strstr(const char *h,const char*b);在字符串h中查找字符串b,返回b在h中第一次出现的位置的开始位置
9、opendir(tmpBuf)
打开tmpBuf路径所指的目录,返回一个DIR结构体指针dir,通过while((entry = readdir(dir)))可以一个个取出目录中的文件,entry ->d_name