为便于以后的查阅与复习本文整理了嵌入式linux C中用到的多数函数,包括以下9个大类:
内存管理
字符串处理
时间函数
随机函数
文件IO函数
标准IO函数
格式化输入输出和错误处理函数
文件和目录函数进程相关函数
一:内存管理函数
1相关函数:malloc
头文件:#include
函数原型:void *malloc(size_t size)
函数说明:分配内存
返回值:成功返回分配的内存首地址,失败返回NULL
2相关函数:free
头文件:#include
函数原型:void free(void *ptr)
函数说明:释放内存,释放ptr为函数malloc返回的指针,调用free后ptr所指向的内存会被
统回收
3mmap(内存映射)
头文件:#include<unistd.h>
#include<sys/mman.h>
函数原型: void mmap(void *star,size_t length,int prot,int flags,int fd,off_t
offset);
函数说明:mmap用来将某个文件映射到内存中,通过对内存的读写实现对文件的操作。参数含
义如下:
start:指向映射后的内存起始地址,通常设为NULL,表示让系统来选定映射地址。操作
成功后,start里的值为映射后的内存首地址。
length:指定文件中被映射的部分的长度,以字节为单位,0表示全部映射。
prot:映射区域的使用方式,有以下选项
PROT_EXEC 映射区域可被执行
PROT_READ 映射区域可被读取
PROT_WRITE 映射区域可被写入
PROT_NONE 映射区域不能存取
flag: 设置映射区域的属性,有以下选项
MAP_FIXED 如果start指定的区域无法映射,则放弃映射
MAP_SHARED 对映射区域的修改会复制回原文件,而且允许其他映射该文件的进程
共享
MAP_LOCKED 将映射区域锁住
fd:文件描述符,代表要映射的文件
offset:文件映射的偏移量。通常设置为0,代表从文件开始处映射,offset必须是分页
大小的整数倍
返回值:无
4相关函数:munmap
头文件:#include<unistd.h>
头文件:#include<sys/mman.h>
函数原型: int munmap(void *start,size_t length);
函数说明:取消参数start所指向的内存映射内存。当进程结束时,内存映射会自动取消,但
关闭对应的文件描述符不会取消映射。
返回值:0:操作成功
-1:操作失败,错误原因存于errno中
二字符串处理函数:
1:相关函数:bzero
头文件:include<sys/mman.h>
函数原型:void bzero(void *s ,int n)
函数说明:将参数s指向的内存区域前n个字节,全部设置为0
返回值:无
2相关函数:memcpy
头文件:#include<string.h>
函数原型:void *memcpy(void *dest,const void *src,size_t n)
函数说明:拷贝src所指向的内存前n个字节到dest所指向的内存单元
返回值:返回dest的值
3相关函数:memcmp
头文件:#include<string.h>
函数原型:int memcpy(const void *s1,const void *s2,size_t n);
函数说明:比较s1,s2所指向的内存区域前n个字节
返回值:0:完全相同
大于0:s1指向内存中的值大于s2指向内存中的值
小于0:s1指向内存中的值小于s2指向内存中的值
4相关函数:memset
头文件:#include<string.h>
函数原型:void *memset(void *s,int c,size_t n);
函数说明:将参数s所指向的内存前n个字节以参数c填入
返回值:返回s的值
5相关函数:strcat
头文件:#include<string.h>
函数原型:char *strcat(char *dest,const char *src)
函数说明:将参数str指向的字符串拷贝到dest指向的字符串尾,dest指向的内存空间要足够
大。
返回值:返回dest的值
6相关函数:strncat
头文件:#include<string.h>
函数原型:char *strncat(char *dest,const char *src,size_t n)
函数说明:将参数str指向的字符串拷贝n个字符到dest指向的字符串尾,dest指向的内存
空间要足够大。
返回值:返回dest的值
7相关函数:strcmp
头文件:#include<string.h>
函数原型:int strcmp(const char *s1t,const char *s2)
函数说明: 比较s1,s2所指向的字符串
返回值:0:相等
大于0:s1指向内容较大
小于0:s1指向内容较小
8相关函数:strncmp
头文件:#include<string.h>
函数原型:int strncmp(const char *s1t,const char *s2,size_t n);
函数说明: 比较s1,s2所指向的字符串前n个字符
返回值:0:相等
大于0:s1指向内容较大
小于0:s1指向内容较小
9相关函数strcpy
头文件:#include<string.h>
函数原型:char *strcpy(char *dest,const char *src)
函数说明:src指向内容拷贝到dest指向的地址
返回值:返回dest的值
10相关函数strncpy
头文件:#include<string.h>
函数原型:char *strncpy(char *dest,const char *src,size_t n)
函数说明:src指向前n个字符内容拷贝到dest指向的地址
返回值:返回dest的值
11相关函数strlen
头文件:#inlude<srring.h>
函数原型:size_t strlen(const char *s)
函数说明:计算s指向字符串长度,不包含\0
返回值:s中包含字符的个数
12相关函数:strstr
头文件:#include<sring.h>
函数原型:char *strstr(const char *haystack,const char *needle)
函数说明:在字符串haystack中查找字符串needle
返回值:返回指定字符第一次出现的地址,否则返回0
三时间函数:
1:time
头文件:#include<time.h>
函数原型 time_t time(time_t *timer)
函数说明 NULL获取日历时间,timer为数值时设置日历时间
返回值:返回日历时间秒数
2:localtime
头文件:<time.h>
函数原型:struct tm *localtime(const time_t *clock)
函数说明:将clock指向的时间转换为本地时间储存在tm结构体
返回值:返回指向tm结构体的指针
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
}
3 gmtime
头文件:<time.h>
函数原型:struct tm *gmtime(long *clock)
函数说明:通过clock指向的日历时间获得格林威治时间
返回值:返回指向tm结构体的指针
4 asctiem
头文件:<time.h>
函数原型:char *asctime(const struct tm *tblock)
函数说明:转换时间为ASCII码
返回值:指向字符串的指针,格式星期,月,日,小时,分,秒,年
5 ctime
头文件:time.h
函数原型:char *ctime(const time_t *time)
函数说明:将日期和时间转换成字符串格式
返回值:返回字符串,格式星期,月,日,小时,分,秒,年
6 gettimeofday
头文件sys/time.h
函数原型:int gettimeofday(struct timeval *tv, struct timezone *tz);
其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果,若不使用则传入NULL
返回值:成功返回0,失败返回1,errno存储错误
结构体timeval的定义为:
struct timeval {
long tv_sec; // 秒数
long tv_usec; // 微秒数
}
7 settimeofday
头问件:sys/time.h unistd.h
函数原型:int settimeofday(struct timeval *tv, struct timezone *tz);
将时间修改为tv指向的结构体,参数tz用设置时区,若不使用则传入NULL
返回值:成功返回0,失败返回1,errno存储错误
四:随机数
1 srand
头问件:stdlib.h
函数原型:void srand(unsigned seed);
函数说明:用来设置rand()产生随机数的种子,seed必须为整数,通常使用getpid()(防止随机数每次
重复)或time(0)返回值当做种子
返回值:无
2 rand
头文件:stdlib.h
函数原型:int rand(void)
函数说明:返回一随即数,范围在0到RAND_MAX之间,使用前必须用srand()设置好随机种子
返回值:随即数
五文件IO函数
1 open
头文件:fcntl.h
sys/type.h
sys/stat.h
函数原型:int open(const char *pathname,int flags)
int open (const char *pathname,int flags,mode_t mode)
函数说明: pathname指向要打开的文件路径字符串
参数flags 标志:
O_RDONLY 以只读方式打开文件
O_WRONLY 以只写方式打开文件
O_RDWR 以读写方式打开文件
O_CREAT 若要打开的文件不存在则创建
O_EXCL 若O_CREAT也被设置,则此选项会去检查文件是否存在,若不存在则创建,否则
出错
O_NOCTTY 若要打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机
O_TRUNG 若文件存在且以可写的方式打开时,此方式会将文件长度清为0
O_APPEND 写入的数据会以附加的方式追加到文件尾
O_NONBLOCK以非阻塞方式打开
参数mode含义如下:
S_IRWXU 0700
S_IRUSR 0400
S_IWUSR 0200
S_IXUSR 0100
S_IRWXG 0070
S_IRGRP 0040
S_IWGRP 0020
S_IXGRP 0010
S_IRWXO 0007
S_IROTH 0004
S_IWOTH 0002
S_IXOTH 0001
返回值:成功返回要打开文件的文件描述符,否则返回-1
2 close
头文件:unistd.h
函数原型:int close(int fd)
函数说明:使用完文件后利用close()关闭该文件,fd为文件描述符
返回值:成功返回0,否则返回-1
3 read
头文件:unistd.h
函数原型:ssize_t read (int fd,void *buf,size_t count)
函数说明:从参数fd所指向的文件中读取count个字节的数据到buf指向的内存中
返回值:返回成功读取的字节数,若返回0则表示已到达文件尾或无数据可读
4 write
头文件:unistd.h
函数原型:ssize_t write (int fd,const void *buf,size_t count)
函数说明:把参数buf 指向的内存count个字节的数据读到fd所指向的文件内
返回值:成功返回实际写入的字节数,若有错误则返回-1
5 lseek
头文件:unistd.h
sys/type.h
函数原型:off_t lseek(int fd ,off_t offset,int whence)
函数说明:每个已打开的文件都有一个读写位置。当打开文件时通常读写位置是指向文件开始;若是以
附加方式打开,则读写的位置会指向文件尾。对文件的读写操作会引起起始位置的变化,该函
数可改变读写指针的位置
fd:文件描述符
offset :依据参数whence来移动读写位置的偏移量
whence:SEEK_SET 0文件的开始处为基准点
SEEK_CUR 1文件的当前位置为基准点
SEEK_END 2文件的末尾为基准点
返回值:成功时返回距文件开头的字节数,出错返回-1
6 sync
头文件:unistd.h
函数原型:int sync(void)
函数说明:把系统缓冲区数据写回磁盘,确保数据同步
返回值:操作成功返回0
六标准IO函数
1 fopen
头文件:stdio.h
函数原型:FILE * fopen(const char *path,const char *mode)
函数说明:path指向要打开文件的路径和文件名
mode:要打开文件的方式
r 打开只读文件,该文件必须存在
r+ 打开可读写文件,该文件必须存在
w 打开只写文件,若该文件存在,则长度清为0;若不存在则创建
w+ 打开可读写文件,若该文件存在,则长度清为0;若不存在则创建
a 以附加的方式打开只写文件,若不存在则创建,存在则写入的数据添加到文件尾
a+ 以附加的方式打开可读写文件,若不存在则创建,存在则写入的数据添加到文件尾
以上选项均可添加选项b,表示打开文件为二进制,但在linux中不作区分
返回值:成功返回指向该流的问价指针。若失败则返回NULL
2 fclose
头文件:stdio.h
函数原型: int fclose(FILE *stream)
函数说明:关闭fopen打开的文件
返回值:成功返回0否则返回1
3 feof
头文件stdio.h
函数原型:int feof(FILE *stream)
函数说明:检测是否读取到了文件末尾
返回值:返回非0值表示读取到了文件末尾
4 fflush
头问件:stdio.h
函数原型:int fflush(FILE *stream)
函数说明:强制将缓冲区里的数据写回stream指向的文件。如果stream为NULL,会将所有打开文件的数据
更新
返回值:成功返回0,否则返回-1
5 getchar
头文件:stdio.h
函数原型: int getc(stdio)
函数说明:从标准输入中读取一个字符,相当于getc(stdio)由宏实现:#define getchar() getc
(stdin)。
返回值:返回读取到得字符,如返回-1表示有错误发生
6 getc
头文件:stdio.h
函数原型:int getc(FILE *stream)
函数说明:从参数stream指向的文件中读取一个字符 #define getc(_stream) (--(_stream)->_cnt >= 0?
0xff & *(_stream)->_ptr++ : _filbuf(_stream))
返回值:返回读取到的字符,若返回-1表示到了文件末尾
7 fgetc
头文件:stdio.h
函数原型:int fgetc(FILE *stream)
函数说明:从参数stream指向的文件中读一个字符
返回值:返回读取到的字符,返回-1表示到了文件尾
8 fgets
头文件 stdio.h
函数原型: char *fgets(char *s,int size,FILE *stream)
函数说明:从参数stream指向的文件中读取字符并存放到参数s所指向的内存空间,直到出现换行符、文件
末尾或者已经已读取了size-1个字符为止,最后会加上‘\0’作为字符串结束
返回值: 操作成功返回s的值,有错误则返回NULL
9 fread
头问件:stdio.h
函数原型:size_t fread (void *ptr,size_t size,size_t nmemb,FILE *stream)
函数说明:从stream中读取nmemb个size大小的数据到ptr
返回值:返回读取到基本数据单位的个数
10 putchar
头文件:stdio.h
函数原型: int putchar(int c)
函数说明: 将参数c字符写到标准输出设备
返回值:返回输出到的字符,失败返回-1
11 putc
头文件:stdio.h
函数原型:int putc(int c,FILE *stream)
函数说明:将参数c转为unsigned char后写入stream指定的文件中,作用和fputc相同,为宏定义
12 fputc
头文件:stdio.h
函数原型:int fputc(int c,FILE *stream)
函数说明:将参数c,转为unsigned char后写入stream指定的文件中
返回值:返回输出到的字符,失败返回-1
13 puts
头文件:stdio.h
函数原型:int puts(const char *s)
函数说明:将参数s指向的字符串写到标准输出设备
返回值:返回输出的字符个数,失败返回-1
14 fputs
头文件:stdio.h
函数原型:int fputs(const char *s,FILE *stream)
函数说明:将参数s指向的字符串写到stream指向的文件
返回值:返回输出的字符个数,失败返回-1
15 fwrite
头文件:stdio.h
函数原型:size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream)
函数说明: 将ptr指向的内容写入stream指向的文件中,size要写入数据的基本单位,大小为字节
nmemb表示要写入的基本数据单位的个数
返回值:返回实际写入的基本数据的单位个数
16 fseek
头文件:stdio.h
函数原型:int fseek(FILE *stream,long offset,int whence)
函数说明:stream已打开的文件指针
offset 移动读写值的位移数
whence:基准点 SEEK_SET 文件开始处为基准点
SEEK_CUR文件当前位置为基准点
SEEK_END文件末尾为基准点
返回值:成功返回0,否则返回-1
17 ftell
头文件:stdio.h
函数原型:long ftell(FILE *stream)
函数说明:取得文件流当前的读取位置
返回值:成功返回当前的读写位置,否则返回-1
18 rewind
头文件:stdio.h
函数原型:void rewind(FILE *stream)
函数说明:把文件流的读写位置移动到文件的开始处
返回值:无
七 文件和目录函数
1 printf
头文件:stdio.h
函数原型:int printf(const char *format,...)
函数说明:printf会根据参数format来转换并格式化数据,然后将结果写到标准输出,参数format可包含
下列三种字符类型:
1直接输出的一般文本
2ASCII控制字符
3格式转换字符
返回值:执行成功返回输出的字符数,失败返回-1,原因存于errno中
2 fprintf
头文件:stdio.h
函数原型:int fprintf(FILE *stream,const char *format,...)
函数说明:根据参数format来转换并格式化数据,然后将结果写到stream指向的文件中
返回值:执行成功返回输出的字符数,失败返回-1,原因存于errno中
3 sprintf
头文件stdio.h
函数原型:int sprintf(char *str,const char *format,...)
函数说明:根据参数format来转换并格式化数据,然后将结果复制到str指向的字符数组
返回值:执行成功返回str的长度,失败返回-1,原因存于errno中
4 scanf
头文件:stdio.h
函数原型:int scanf (const char *format,...)
函数说明:printf会将输入输入的数据根据参数format来转换数据并格式化数据,然后将结果保存到指定
的变量中
返回值:执行成功返回输入的参数的个数,失败返回-1,原因存于errno中
5 fscanf
头文件:stdio.h
函数原型:int fscanf (FILE *stream,const char *format,...)
函数说明:从参数stream指定的文件流中读取字符串,再根据参数format来转换并格式化数据
返回值:执行成功返回参数数目,失败返回-1,失败原因存于errno中
6 strerror
头文件:string.h
errno.h
函数原型:char *strerror(int errnum)
函数说明:根据errnum(定义在errno.h中)来查询其错误原因的描述字符串并返回指向该字符串的指针
返回值:指向描述错误原因的字符串
7 perror
头文件:string.h
函数原型:void perror(const char *s)
函数说明:perror将上一个函数发生错误的原因输出到标准输出。s所指字符串会先输出,再输出错误原
因。错误原因依据全局变量errno的值来确定
返回值:无
8 ferror
头文件:stdio.h
函数原型:int ferror(FILE *stream)
函数说明:ferror 检查参数stream所指向的文件流是否发生了错误情况
返回值:有错误返回非0值
八文件和目录参数
1 stat
头文件:sys/stat.h
unistd.h
函数原型:int stat(const char *path,struct stat *buf)
函数说明:将path指向的文件的属性复制到buf指向的结构体中,
返回值:成功返回0失败返回-1,错误存储于errno中
struct stat {
mode_t st_mode; // 文件类型和访问权限
dev_t st_dev; // 文件的设备编号
dev_t st_rdev; // 文件为设备文件则为设备文件编号
nlink_t st_nlink; // 文件的硬链接数
uid_t st_uid; // 文件所有者的用户识别码
gid_t st_gid; // 文件所属组的识别码
off_t st_size; // 文件大小,以字节计算
time_t st_atime; // 文件最近一次被存取或执行的时间
time_t st_mtime; // 文件最后一次被修改的时间
time_t st_ctime; // i_node最近一次被修改的时间
long st_blksize; // 文件系统I/O缓冲区的大小
long st_blocks; -// 占用文件块的个数
};
2 fstat
头文件:sys/stat.h
unistd.h
函数原型:int fstat(int fd,struct stat *buf)
函数说明:将fd指向的文件的属性复制到buf的结构中,与stat不同之处在于一个是指针指定,一个是描述
符指定
返回值:成功返回0失败返回-1,错误存储于errno中
3 lstat
头文件:sys/stat.h
unistd.h
函数原型:int lstat(const char *path,struct stat *buf)
函数说明:与stat区别在于,目标文件为符号链接时,lstat会返回该链接本身的属性
返回值:成功返回0失败返回-1,错误存储于errno中
4 link
头文件:unistd.h
函数原型:int link(const char *oldpath,const char *newpath)
函数说明:用newpath指定的名称创建一个新的硬链接到参数oldpath所指定的已存在文件
返回值:执行成功返回0,失败返回-1,错误代码存于errno
5 symlink
头文件:unistd.h
函数原型:int symlink(const char *oldpath,const char *newpath)
函数说明:创建一个符号链接
返回值:执行成功返回0,失败返回-1,错误代码存于errno
6 chmod
头文件: sys/type.h
sys/stat.h
函数原型:int chmod(const char * path,mode_t mode)
函数说明:按mode指定的权限来修改path指向的文件
返回值:执行成功返回0,失败返回-1,错误代码存于errno
7 truncate
头文件: unistd.h
函数原型:int truncate(const char *path,off_t length)
函数说明:将path指定文件的大小修改为 length指定的大小,若原文件大小超过lenth,则超出部分散去
返回值:执行成功返回0,失败返回-1,错误代码存于errno
8 rename
头文件:stdio.h
函数原型:int rename(const char *oldpath,const char *newpath)
函数说明:将oldpath所指向的文件名改为newpath所指向的文件名
返回值:执行成功返回0,失败返回-1,错误代码存于errno
9 remove
头文件:stdio.h
函数原型:int remove(const char *path)
函数说明:删除path所指定的文件
返回值:执行成功返回0,失败返回-1,错误代码存于errno
10 chdir
头文件:stdio.h
函数原型:int chdir(const char *path)
函数说明:将当前的工作目录改变到path指定的路径
返回值:执行成功返回0,失败返回-1,错误代码存于errno
11 mkdir
头文件:sys/stat.h
函数原型:int mkdir(const char *filename,mode_t mode)
函数说明:创建mode权限的filename指向的目录
返回值:执行成功返回0,失败返回-1,错误代码存于errno
12 opendir
头文件: sys/stat.h
dirent.h
函数原型:DIR *opendir(const char *name)
函数说明:opendir 打开name指定的目录,并返回DIR形式的目录流
返回值:成功返回目录流,失败返回NULL,错误代码存于errno
13 readdir
头文件:sys/stat.h
dirent.h
函数原型:struct dirent *readdir(DIR *dir)
函数说明:返回dir指向目录流的下一个entry
返回值:执行成功返回下一个条目,失败或读到目录文件尾返回NULL
返回值: 如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指
WUNTRACED 如果子进程进入暂停执行情况则马上返回,但结束状态不予以理会。
返回值: