一、string.h
1.memcpy
函数原型:void *memcpy(void *dest, const void *src, size_t n);
功能:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
返回值:函数返回dest的值。
2.strdup
strdup()主要是拷贝字符串s的一个副本,由函数返回值返回,这个副本有自己的内存空间,和s不相干。strdup函数复制一个字符串,使用完后要记得删除在函数中动态申请的内存,strdup函数的参数不能为NULL,一旦为NULL,就会报段错误,因为该函数包括了strlen函数,而该函数参数不能是NULL。
strdup的工作原理:
char * __strdup (const char *s)
{
size_t len =strlen (s) + 1;
void *new =malloc (len);
if (new == NULL)
return NULL;
return (char *)memcpy (new, s, len);
}
二、stdio.h
1.ferror
函数原型: int ferror(FILE *stream);
功 能: 在调用各种输入输出函数(如 putc.getc.fread.fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查。 它的一般调用形式为 ferror(fp);
返回值:如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。应该注意,对同一个文件 每一次调用输入输出函数,均产生一个新的ferror函 数值,因此,应当在调用一个输入输出函数后立即检 查ferror函数的值,否则信息会丢失。在执行fopen函数时,ferror函数的初始值自动置为0。
2.printf
函数原型:int printf(const char *format,[argument]);
功能:产生格式化输出的函数,向终端输出(显示器、控制台等)
字母h,出现在整数后,作为short类型打印;
宽度或精度可以用星号*表示,这时,宽度或精度的值通过转换下一个参数(必须为int类型)来计算。例如,为了从字符串s中最多打印max个字符,使用如下语句:
<span style="font-size:18px;">printf("%.*s", max, s);</span>
返回值:打印的字符数
3.sprintf
函数原型:int sprintf( char *buffer, const char *format, [ argument] … );
功能:同printf,只是将结果保存到字符串buffer中
返回值:字符串长度
3.5 fprintf
函数原型:int fprintf( FILE *stream, const char *format, ... );
功能:fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件. 相当于sprintf+fputs
返回值:输出的字符数,发生错误时返回一个负值.
4.scanf
函数原型:int scanf( const char *format, ... );
功能:转换结果放在相应的参数所指向的变量中。但是如果转换规格说明中有用作赋值屏蔽字符的*,则跳过输入字段,不进行赋值。输入字段是一个由非空白符组成的字符串,它的宽度要么直至下一个空白符,要么直至指定的最大字段宽。这表明scanf将越过行边界读取它的输入,因为换行符也是空白符(空白符包括空格符、横向制表符、换行符、回车符、纵向制表符及换页符)。
普通字符串也可以出现在scanf格式串中,但是必须与输入中相同的字符串匹配。
<span style="font-size:18px;">scanf("%d/%d/%d", &month, &day, &year);</span>
返回值:成功赋值的数据项数
5.sscanf函数原型:int sscanf(char *string, char *format, arg1, arg2, ...)
功能:与scanf相同,只是从string中读入。
返回值:成功赋值的数据项数
5.5 fscanf
函数原型:int
fscanf
(
FILE
*stream,
char
*format,[argument...]);
功能:从一个流中执行格式化输入,fscanf遇到空格和换行时结束。
返回值:整型,成功读入的参数的个数
6.fileno
函数原型:int _fileno( FILE *stream );
函数功能:fileno()用来取得参数stream指定的文件流所使用的文件描述符
返回值:某个数据流的文件描述符
7.feof
函数原型:int feof ( FILE * stream );
函数功能:检查文件结束指示
返回值:流结束返回非零值
三、unistd.h
1.fork
函数原型:pid_t fork( void);
功能:一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。
返回值:若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1。
2.execlp
函数原型:int execlp(const char * file,const char * arg,...,(char *)0);
功能:execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。如果用常数0来表示一个空指针,则必须将它强制转换为一个字符指针,否则将它解释为整形参数,如果一个整形数的长度与char * 的长度不同,那么exec函数的实际参数就将出错。如果函数调用成功,进程自己的执行代码就会变成加载程序的代码,execlp()后边的代码也就不会执行了.
返回值:如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。
四、signal.h
1.signal
函数原型:sig_tsignal(int signum,sig_t handler);
功能:第一个参数signum指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号。
第二个参数handler描述了与信号关联的动作,它可以取以下三种值:
(1)一个无返回值的函数地址
此函数必须在signal()被调用前申明,handler中为这个函数的名字。当接收到一个类型为sig的信号时,就执行handler所指定的函数。这个函数应有如下形式的定义:
void func(int sig);
sig是传递给它的唯一参数。执行了signal()调用后,进程只要接收到类型为sig的信号,不管其正在执行程序的哪一部分,就立即执行func()函数。当func()函数执行结束后,控制权返回进程被中断的那一点继续执行。
(2)SIG_IGN
这个符号表示忽略该信号,执行了相应的signal()调用后,进程会忽略类型为sig的信号。
(3)SIG_DFL
这个符号表示恢复系统对信号的默认处理。
signal()会依参数signum指定的信号编号来设置该信号的处理函数。当指定的信号到达时就会跳转到参数handler指定的函数执行。当一个信号的信号处理函数执行时,如果进程又接收到了该信号,该信号会自动被储存而不会中断信号处理函数的执行,直到信号处理函数执行完毕再重新调用相应的处理函数。但是如果在信号处理函数执行时进程收到了其它类型的信号,该函数的执行就会被中断。
返回值:返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1)。
五、fcntl.h
1.open
函数原型:intopen(const char *pathname, int oflag, .../* mode_t mode */);
返回值:若成功则返回文件描述符,若出错则返回-1
说明:仅当创建新文件时才使用第三个参数。oflag参数为下列常量“或”运算构成:
O_RDONLY(0),O_WRONLY(1),O_RDWR(2)。此三个有且只有一个,此外还有其他选项如O_APPEND,O_CREAT等
2.creat
函数原型:int creat(const char *pathname,mode_t mode);
返回值:若成功则返回为只写打开的文件描述符,若出错则返回-1.
说明:此函数等效于:
open(pathname,O_WRONLY | O_CREAT | O_TRUNC,mode);
creat的一个不足之处是它以只写方式打开所创建的文件。在提供open的新版本之前,如果要创建一个临时文件,并要先写该文件,然后又读该文件,则必须先调用creat、close,然后再调用open。现在则可用下列方式调用open:
open(pathname,O_RDWR | O_CREAT | O_TRUNC,mode);
3.close
函数原型:int close(int filedes);
返回值:若成功返回0,若出错返回-1.
说明:关闭一个文件时会释放该进程加在该文件上的所有记录锁。当一个进程终止时,内核自动关闭它所有打开的文件。很多程序都利用了这一功能而不显式地用close关闭打开文件。
4.lseek
函数原型:off_t lseek(int filedes, off_t offset, int whence);
返回值:若成功则返回新的文件偏移量,若出错返回-1
说明:若whence是SEEK_SET,则偏移量为offset
若whence是SEEK_CUR,则偏移量为offset+当前值
若whence是SEEK_END,则偏移量为offset+文件长度
off_t currpos=lseek(fd, 0, SEEK_CUR)可获得当前偏移量
因为偏移量可能是负值,所以在比较lseek的返回值时应当谨慎,不要测试它是否小于0,而要测试它是否等于-1
5.read
函数原型:ssize_t read(int filedes, void *buf, size_t nbytes);
返回值:若成功则返回读到的字节数,若已到文件结尾则返回0,若出错则返回-1.
6.write
函数原型:ssize_t write(int filedes, const void *buf, size_t nbytes);
返回值:若成功返回已写的字节数,出错返回-1.
7.fcntl
函数原型:int fcntl(int filedes, int cmd, .../* int arg */);
返回值:若成功则依赖于cmd,若出错则返回-1
说明:可以改变已打开文件的性质。
六、_XOPEN_SOURCE >= 500
1、pread
函数原型:ssize_t pread(int filedes, void *buf, size_t nbytes, off_t offset);
返回值:读到的字节数,若出错返回-1
相当于顺序调用lseek和read,但又有如下区别:
(1)调用pread时,无法中断其定位和读操作。
(2)不更新文件指针。
2.pwrite
函数原型:ssize_t pwrite(int filedes, const void *buf, size_t nbytes, off_t offset);
返回值:已写的字节数,若出错返回-1
相当于顺序调用lseek和write,但又有如下区别:
(1)调用write时,无法中断其定位和写操作。
(2)不更新文件指针。
七、XSI
1.dup
函数原型:int dup(int filedes);
返回值:若成功则返回新的文件描述符,若出错则返回-1
说明:复制一个现存的文件描述符。新的文件描述符是当前可用的文件描述符中的最小值。
2.dup2
函数原型:int dup(int filedes, int filedes2);
返回值:若成功则返回新的文件描述符,若出错则返回-1
说明:复制一个现存的文件描述符。新的文件描述符是filedes2。若filedes2已经打开且不同于filedes,则先将其关闭。
3.sync,fsync,fdatasync
函数原型:void sync(void);
int fsync(int filedes);
int fdatasync(int filedes);
返回值:若成功返回0,若出错返回-1
说明:sync函数只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。fsync只对指定的filedes起作用,并等待写磁盘操作结束,而后返回。fdatasync函数类似于fsync但是只影响文件的数据部分。除了数据之外fsync还会同步更新文件的属性。
4.sysconf, pathconf, fpathconf
函数原型:long sysconf(int name);
long pathconf(const chat *pathname, int name);
long fpathconf(int filedes, int name);
返回值:若成功则返回相应值,若出错则返回-1
说明:可取得运行时限制。
5.ioctl
函数原型:ioctl(int filedes, int request, ...);
返回值:若出错则返回-1,若成功返回其他值。
说明:是I/O操作的杂物箱。
八、ctype.h
ctype.h
是C标准函数库中的头文件,定义了一批C语言字符分类函数(C character classification functions),用于测试字符是否属于特定的字符类别,如字母字符、控制字符等等。既支持单字节字符,也支持宽字符。
单字节 | 宽字节 | 描述 |
---|---|---|
isalnum | iswalnum | 是否为字母数字 |
isalpha | iswalpha | 是否为字母 |
islower | iswlower | 受否为小写字母 |
isupper | iswupper | 是否为大写字母 |
isdigit | iswdigit | 是否为数字 |
isxdigit | iswxdigit | 是否为16进制数字 |
iscntrl | iswcntrl | 是否为控制字符 |
isgraph | iswgraph | 是否为图形字符(例如,空格、控制字符都不是) |
isspace | iswspace | 是否为空格字符(包括制表符、回车符、换行符等) |
isblank | iswblank | 是否为空白字符 (C99/C++11新增)(包括水平制表符) |
isprint | iswprint | 是否为可打印字符 |
ispunct | iswpunct | 是否为标点 |
tolower | towlower | 转换为小写 |
toupper | towupper | 转换为大写 |
不适用 | iswctype | 检查一个wchar_t 是否是属于指定的分类 |
不适用 | towctrans | 使用指定的变换映射来转换一个wchar_t (实际上是大小写的转换) |
不适用 | wctype | 返回一个宽字符的类别,用于iswctype 函数 |
不适用 | wctrans | 返回一个变换映射,用于 towctrans |
九、stdlib
1.system
函数原型:int system(const char * string);
函数说明:system()会调用fork()产生子进程,由子进程来调用/bin/sh -c string来执行参数string字符串所代表的命令,此命>令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
返回值 :=-1:出现错误
=0:调用成功但是没有出现子进程
>0:成功退出的子进程的id
2.malloc
函数原型:extern void *malloc(unsigned int num_bytes);
函数说明: 向系统申请分配指定size个字节的内存空间。当内存不再使用时,应使用free()函数将内存块释放。
返回值:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。
3.calloc
函数原型:void *calloc(unsigned n, unsigned size);
说明:在内存的动态存储区中分配n个长度为size的连续空间。
返回值:函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。