C库函数笔记

一、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

函数原型:intfscanf(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指明了所要处理的信号类型,它可以取除了SIGKILLSIGSTOP外的任何一种信号。

第二个参数handler描述了与信号关联的动作,它可以取以下三种值:

1)一个无返回值的函数地址

此函数必须在signal()被调用前申明,handler中为这个函数的名字。当接收到一个类型为sig的信号时,就执行handler所指定的函数。这个函数应有如下形式的定义:

void func(int sig);

sig是传递给它的唯一参数。执行了signal()调用后,进程只要接收到类型为sig的信号,不管其正在执行程序的哪一部分,就立即执行func()函数。当func()函数执行结束后,控制权返回进程被中断的那一点继续执行。

2SIG_IGN

这个符号表示忽略该信号,执行了相应的signal()调用后,进程会忽略类型为sig的信号。

3SIG_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.hC标准函数库中的头文件,定义了一批C语言字符分类函数(C character classification functions),用于测试字符是否属于特定的字符类别,如字母字符、控制字符等等。既支持单字节字符,也支持宽字符

单字节 宽字节 描述
isalnumiswalnum是否为字母数字
isalphaiswalpha是否为字母
isloweriswlower受否为小写字母
isupperiswupper是否为大写字母
isdigitiswdigit是否为数字
isxdigitiswxdigit是否为16进制数字
iscntrliswcntrl是否为控制字符
isgraphiswgraph是否为图形字符(例如,空格、控制字符都不是)
isspaceiswspace是否为空格字符(包括制表符、回车符、换行符等)
isblankiswblank是否为空白字符 (C99/C++11新增)(包括水平制表符)
isprintiswprint是否为可打印字符
ispunctiswpunct是否为标点
tolowertowlower转换为小写
touppertowupper转换为大写
不适用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。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值