Linux常用函数查询
linux多线程 pthread常用函数详解

linux多线程pthread常用函数详解Linux多线程是指在Linux操作系统中运行的多个线程。
线程是执行程序的基本单位,它独立于其他线程而存在,但共享相同的地址空间。
在Linux中,我们可以使用pthread库来实现多线程程序。
本文将详细介绍pthread库中常用的函数,包括线程的创建、退出、同步等。
一、线程创建函数1. pthread_create函数pthread_create函数用于创建一个新线程。
其原型如下:cint pthread_create(pthread_t *thread, const pthread_attr_t *attr, void*(*start_routine) (void *), void *arg);参数说明:- thread:用于存储新线程的ID- attr:线程的属性,通常为NULL- start_routine:线程要执行的函数地址- arg:传递给线程函数的参数2. pthread_join函数pthread_join函数用于等待一个线程的结束。
其原型如下:int pthread_join(pthread_t thread, void retval);参数说明:- thread:要等待结束的线程ID- retval:用于存储线程的返回值3. pthread_detach函数pthread_detach函数用于将一个线程设置为分离状态,使其在退出时可以自动释放资源。
其原型如下:cint pthread_detach(pthread_t thread);参数说明:- thread:要设置为分离状态的线程ID二、线程退出函数1. pthread_exit函数pthread_exit函数用于退出当前线程,并返回一个值。
其原型如下:cvoid pthread_exit(void *retval);参数说明:- retval:线程的返回值2. pthread_cancel函数pthread_cancel函数用于取消一个线程的执行。
linux原子操作函数

linux原子操作函数Linux原子操作函数是一组用于实现多线程同步和互斥的函数。
在并发编程中,多个线程同时访问共享资源时,可能会导致数据的不一致或竞争条件的发生。
原子操作函数可以保证多线程之间的顺序性和一致性,从而避免了竞争条件的产生。
原子操作函数的特点是不可分割和不可中断,即在执行原子操作期间,不会被其他线程打断或者分割成多个步骤执行。
这种特性保证了原子操作的完整性,使多线程之间可以安全地共享资源。
Linux提供了多个原子操作函数,其中最常用的有以下几个:1. atomic_inc(原子增加):该函数用于对指定的整型变量进行原子递增操作。
它保证了递增操作的完整性,不会被其他线程打断或者分割成多个步骤执行。
该函数常用于实现计数器等功能。
2. atomic_dec(原子减少):与atomic_inc函数类似,该函数用于对指定的整型变量进行原子递减操作。
同样地,它也保证了递减操作的完整性。
3. atomic_add(原子加法):该函数用于对指定的整型变量进行原子加法操作。
它可以将一个给定的值原子地加到指定的变量上,保证了整个加法操作的完整性和一致性。
4. atomic_sub(原子减法):与atomic_add函数类似,该函数用于对指定的整型变量进行原子减法操作。
它可以将一个给定的值原子地从指定的变量上减去。
5. atomic_xchg(原子交换):该函数用于原子地交换两个指定的值。
它可以保证交换操作的完整性,不会被其他线程打断。
6. atomic_cmpxchg(原子比较并交换):该函数用于比较指定的变量的值与给定的期望值是否相等,如果相等则用新的值替换旧的值。
它是一种常用的原子操作,可以用于实现互斥锁等功能。
除了上述常用的原子操作函数外,Linux还提供了其他一些原子操作函数,如atomic_and、atomic_or、atomic_xor等,它们分别用于进行按位与、按位或和按位异或的原子操作。
linux 系统时间函数

linux 系统时间函数
Linux系统提供了许多用于操作系统时间和日期的函数。
以下是一些常见的函数。
1. time_t time(time_t *t):返回当前时间的时间戳,以自1970年1月1日00:00:00 UTC以来的秒数为单位。
如果t不为空,则时间戳也被存储在t指向的位置。
2. struct tm *localtime(const time_t *timep):将给定的时间戳转换为本地时间。
返回一个指向tm结构的指针,其中包含本地时间的小时,分钟,秒等。
3. struct tm *gmtime(const time_t *timep):将给定的时间戳转换为GMT时间(格林威治标准时间)。
返回一个指向tm结构的指针,其中包含GMT时间的小时,分钟,秒等。
4. time_t mktime(struct tm *tm):将给定的tm结构(其中包含小时,分钟,秒等)转换为对应的时间戳。
5. char *ctime(const time_t *timep):将给定的时间戳转换为一个字符串,表示为"Day Mon dd hh:mm:ss yyyy"的格式。
6. int gettimeofday(struct timeval *tv, struct timezone *tz):获取当前时间和时区。
返回一个表示微秒级别的时间戳,并将tv指向的结构中的秒数和微秒
数及tz指向的结构中的本地时区信息填充。
归纳整理Linux下C语言常用的库函数----文件操作

归纳整理Linux下C语⾔常⽤的库函数----⽂件操作在没有IDE的时候,记住⼀些常⽤的库函数的函数名、参数、基本⽤法及注意事项是很有必要的。
参照Linux_C_HS.chm的⽬录,我⼤致将常⽤的函数分为⼀下⼏类:1. 内存及字符串控制及操作2. 字符串转换3. 字符测试4. ⽂件操作5. 时间⽇期6. 常⽤数学函数7. ⽂件内容操作8. ⽂件权限控制9. 进程操作10. 线程操作11. Socket操作12. 信号处理13. 数据结构及算法这次主要总结的是上⾯⿊⾊部分,关于⽂件操作的函数。
系统调⽤归类** 函数名⽤法备注**1. int open(const char *pathname, int flags); open and possibly create a file or device flags 必须包含O_RDONLY, O_WRONLY, or O_RDWR中的任何⼀个**2. int open(const char *pathname, int flags, mode_t mode); UP mode只是在flags中包含O_CREAT时才有效**3. int fsync(int fd); synchronize a file's in-core state with storage device 写完数据close前必须先同步,以防意外**4. off_t lseek(int fd, off_t offset, int whence); 定位⽂件位置第三个参数可以为SEEK_SET SEEK_CUR SEEK_END**5. ssize_t read(int fildes, void *buf, size_t nbyte); UP ⽂件位置会随读取的字节数移动**6. ssize_t write(int fildes, const void *buf, size_t nbyte); UP UP**7. int close(int fd); UP UP**8. void *mmap(void *addr, size_t length, int prot, int flags, 内存映射先⽤fstat得到⽂件⼤⼩,然后使⽤该函数将⽂件内容映射到内存中,然后就可以int fd, off_t offset); 直接调⽤字符串函数操作。
Linux常用C函数open和read以及write的使用说明

Linux常用C函数o pen和r ead以及write的使用说明2008-03-19 13:56open(打开文件)相关函数read,write,fcntl,close,link,stat,umask,unlink,fopen表头文件 #includ e<sys/types.h>#includ e<sys/stat.h>#includ e<fcntl.h>定义函数 int open( constchar * pathna me, int flags);int open( constchar * pathna me,int flags, mode_t mode);函数说明参数path name指向欲打开的文件路径字符串。
下列是参数f lags所能使用的旗标:O_RDON LY 以只读方式打开文件O_WRON LY 以只写方式打开文件O_RDWR以可读写方式打开文件。
上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用O R(|)运算符组合。
O_CREA T 若欲打开的文件不存在则自动建立该文件。
O_EXCL如果O_CR EAT 也被设置,此指令会去检查文件是否存在。
文件若不存在则建立该文件,否则将导致打开文件错误。
此外,若O_CRE AT与O_EXCL同时设置,并且欲打开的文件为符号连接,则会打开文件失败。
O_NOCT TY 如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机。
O_TRUN C 若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0,而原来存于该文件的资料也会消失。
O_APPE ND 当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。
Linux常用数学函数篇

Untitled Document
页码,1/9
abs(计算整型数的绝对值)
执行 cos(0.5) = 0.877583
页码,4/9
cosh(取双曲线余玄函数值)
相关函数 sinh,tanh
表头文件 #include<math.h>
定义函数 double cosh(double x);
函数说明 cosh()用来计算参数x的双曲线余玄值,然后将结果返回。数学定义 式为:(exp(x)+exp(-x))/2。
执行 angle = 1.047198
asin(取反正弦函数值)
file://D:\linux_c\function\06.html
2004-1-9
Untitled Document
页码,2/9
相关函数 acos , atan , atan2 , cos , sin , tan
表头文件 #include <math.h>
返回值 返回参数x的底数部分,指数部分则存于exp指针所指的地址。
附加说明 使用GCC编译时请加入-lm。
范例 #include <math.h> main() { int exp; double fraction; fraction = frexp (1024,&exp); printf("exp = %d\n",exp); printf("fraction = %f\n", fraction); }
linux系统find用法

linux系统find用法Linux系统中的find命令是一个非常强大和常用的工具,它可以帮助用户在文件系统中查找文件和目录。
find命令支持各种不同的选项和参数,可以根据文件名、文件类型、文件大小、文件权限等条件来进行查找。
一、基本用法1. 查找文件:最简单的用法是通过文件名来查找文件。
使用find命令的基本语法是:find 路径-name 文件名。
例如,要在当前目录及其子目录中查找名为"test.txt"的文件,可以使用以下命令:find . -name test.txt这条命令将在当前目录及其子目录中查找名为"test.txt"的文件,并显示出所有符合条件的文件的路径。
2. 查找目录:和查找文件类似,也可以使用find命令来查找目录。
使用find命令查找目录的基本语法是:find 路径-type d -name 目录名。
例如,要在当前目录及其子目录中查找名为"test"的目录,可以使用以下命令:find . -type d -name test这条命令将在当前目录及其子目录中查找名为"test"的目录,并显示出所有符合条件的目录的路径。
3. 查找指定类型的文件:find命令支持通过文件类型来查找文件。
使用find命令查找指定类型的文件的基本语法是:find 路径-type 文件类型。
例如,要在当前目录及其子目录中查找所有的文本文件,可以使用以下命令:find . -type f -name "*.txt"这条命令将在当前目录及其子目录中查找所有的文本文件,并显示出所有符合条件的文件的路径。
4. 递归查找:默认情况下,find命令会递归查找指定路径下的所有子目录。
如果不希望递归查找,可以加上-maxdepth参数来限制查找的深度。
例如,要在当前目录中查找名为"test.txt"的文件,但不查找子目录,可以使用以下命令:find . -maxdepth 1 -name test.txt这条命令将在当前目录中查找名为"test.txt"的文件,但不会查找子目录。
linux核心函数

linux核心函数Linux 内核是操作系统的核心部分,它提供了操作系统的核心功能,包括进程管理、内存管理、文件系统等。
Linux 内核的源代码中包含了大量的函数,用于实现各种操作系统的功能。
以下是一些Linux 内核中常见的核心函数,它们扮演着关键的角色:1.进程管理函数:–fork():创建一个新的进程。
–exec():在当前进程中执行一个新的程序。
–wait():等待子进程结束。
–exit():终止当前进程。
2.调度和任务管理函数:–schedule():进行进程调度。
–yield():主动让出CPU,将当前进程移动到就绪队列的末尾。
–wake_up_process():唤醒一个等待中的进程。
3.内存管理函数:–kmalloc():在内核中分配内存。
–kfree():释放内核中的内存。
–vmalloc():在虚拟地址空间中分配内存。
4.文件系统函数:–open():打开一个文件。
–read():从文件中读取数据。
–write():向文件中写入数据。
–close():关闭文件。
5.设备驱动函数:–register_chrdev():注册字符设备。
–unregister_chrdev():注销字符设备。
–request_irq():注册中断处理函数。
6.网络函数:–socket():创建套接字。
–bind():将套接字与地址绑定。
–listen():侦听传入连接请求。
–accept():接受传入的连接请求。
7.定时器和时钟函数:–timer_create():创建一个定时器。
–timer_settime():设置定时器的时间。
–gettimeofday():获取当前时间。
8.同步和互斥函数:–spin_lock():获取自旋锁。
–spin_unlock():释放自旋锁。
–mutex_lock():获取互斥锁。
–mutex_unlock():释放互斥锁。
这些函数仅仅是Linux 内核中众多函数的一小部分,Linux 内核的源代码非常庞大而复杂,包含了各种各样的功能和模块。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1: 系统调用:打开一个文件函数原型:int open(const char pathname, info flage, /* mdode_t m) 头文件:#include <unistd.h>#include <fcntl.h>#include <sys/stat.h>参数:flag1> 下面三个常量只能选用一个:O_RDONLY, O_WRONLY, O_RDWR2> O_CREAT :如果文件不存在,则创建此文件,选用个参数时,必须同时指定mode参数3> O_SYNC :最严格的同步方式,每次write操作在数据和属性都协议时再返回2:系统调用:改变文件的所有者1> 函数原型:int chown(cont char *path, uid_t uid, gid_t gid) ;int fchown(int fd, uid_t uid, gid_t gid) ;int lchown(int fd, uid_t uid, gid_t gid) ;2> 头文件:#include <unistd.h>#include <sys/types.h>3> 参数:略4> 返回值:略3:系统调用:创建连接1> 函数原型:int link(const char *existPath, const char *newPath) ;2> 头文件:#include <unistd.h>3> 参数:existpath :已经存在的文件newpath :新的文件4> 返回值:略 4:系统调用:删除一个文件5> 备注:如果newpath已经存在,则失败4:系统调用:删除一个文件1> 函数原型:int unlink(const char *path) ;2> 头文件:#include <unistd.h>3> 参数:略4> 返回值:略5> 备注:调用的函数的结果是使得文件的inode-1,如果i_node=0则自动删除文件数据区5:标准函数:重命令函数1> 函数原型:int rename(const char *oldname, const char *newname) ;2> 头文件:#include <stdio.h>3> 参数:略4> 返回值:略6:系统调用:读连接文件内容函数1> 函数原型:int readlink(const char *path, char *buf, int size)2> 头文件:#include <unistd.h>3> 参数:略4> 返回值:略7:系统调用:新建一个目录1> 函数原型:int mkdir(const char *pathname, mode_t mode) ;2> 头文件:#include <sys/types.h>#include <sys/stat.h>3> 参数:略4> 返回值:略8:系统调用:删除一个空目录1> 函数原型:int rmdir(const char *pathname) ;2> 头文件:#include <unistd.h>3> 参数:略4> 返回值:略9:其他函数:得到文件名最大长度函数1> 函数原型:int pathconf(const char *relativePath, int parameters) ;2> 头文件:#include <limits.h>3> 参数:reletivePath :相对路径,一般取‘/’parameters :=_PC_PATH_MAX4> 返回值:返回本系统支持的最大文件名称长度10:系统调用:改变当前工作目录函数1> 函数原型:int chdir(cont char *pathname) ;2> 头文件:#include <unistd.h>3> 参数:略4> 返回值:略11:系统调用:得到的当前工作目录函数1> 函数原型:char* getcwd(char *buf, int size) ;2> 头文件:#include <unistd.h>3> 参数:buf :存放路径名的首地址size :指出存储空间的字节数4> 返回值:返回当前路径的完整名称12:系统调用:同步函数(两个)1> 函数原型:void sync(void) ;int fsync(int fd) ;2> 头文件:#include <unistd.h>3> 参数:fd :特定的文件描述符4> 返回值:fsync函数只有等到真正写到文件中才返回5> 备注:1> sync函数只是将修改过的块写入队列2> fsync对单个文件操作,写完才返回,应用于数据库中13:特别函数:查询某一个特定用户是否存在1> 函数原型:passwd* getpwuid(uid_t uid) ;passwd* getpwnam(const char *name) ;2> 头文件:#include <sys/types.h>#include <pwd.h>3> 参数:略4> 返回值:返回一个struct passwd指针5> 备注:可以根据一个用户的uid和name来获得这个用户的信息14:特别函数:查询所有的用户信息1> 函数原型:void setpwent() ;passwd* getpwent() ;void endpwent() ;2> 头文件:#include <pwd.h>3> 参数:略4> 返回值:略5> 备注:1> 可以用循环结构来处理2> 开始前最好先要setpwent(),最后一定要endpwent()15:特别函数:查看组用户的函数同上 getgrgid(), getgrnam(), setgrent(), getgrent(), endgrent() ;16:特别函数:查看主机信息1> 函数原型:int uname(struct utsname *name) ;2> 头文件:#include <utsname.h>3> 参数:把获得的东西存入struct utsname中4> 返回值:略17:特别函数: 获得主机名称1> 函数原型:int gethostname(char *buf, int size) ;2> 头文件:#include <unistd.h>3> 参数:略4> 返回值:略18:时间函数:得到当前时间1> 函数原型:time_t time(time_t *buf) ;2> 头文件: #include <time.h>3> 参数:buf :把得到的time_t值存入tm数据结构4> 返回值:返回日历时间time_t5> 备注:日历时间是一个秒数19:特别函数:time_t和tm数据结构之间的转换1> 函数原型:time_t mktime(tm *buf) ;struct tm* gmtime(const time_t *ptr) ;2> 头文件:#include <time.h>3> 参数:略4> 返回值:略20:特别函数:转化可视时间1> 函数原型:char* asctime(const struct tm *ptr) ;char* ctime(const time_t *t) ;2> 头文件:#include <time.h>3> 参数:略4> 返回值:略21:特别函数:退出程序1> 函数原型:void exit(int status) ;void _exit(int status) ;2> 头文件:exit --> #include <stdio.h>_exit --> #include <unistd.h>3> 参数:略4> 返回值:略5> 备注:1> exit :退出时对每个文件流都进行fclose操作2> _exit:退出,直接进入内核22:特别函数:注册函数1> 函数原型:int atexit( void (fun*)(void) ) ;2> 头文件:#include <stdlib.h>3> 参数:void (fun*) (void)4> 返回值:略5> 备注:1> 函数的参数是返回值void,参数void的函数2> 先注册的后执行,后注册的先执行23:特别函数:和内存分配相关的四个函数1> 函数原型:void* malloc(size_t size) ;void* calloc(size_t nobj, size_t size) ;void* realloc(void *ptr, size_t newsize) ;void free(void *ptr) ;2> 头文件:#include <stdio.h>3> 参数:在realloc中,newsize指的是新的空间的大小4> 返回值:略5> 备注:1> realloc函数中,newsize指的是新的要申请空间的大小2> calloc和malloc的区别是后者申请完空间后,会初始化24:特别函数:环境变量的相关操作1> 函数原型:char* getenv(const char *name) ;int putenv(const char *str) ;int setenv(const char *name, const char *value, int rewrite) ;unsetenv(const char *name) ;2> 头文件:#include <stdlib.h>3> 参数:1> rewrite != 1,现删除原来的变量2> rewrite ==1,不删除现存定义4> 返回值:略25:特殊函数:保存环境函数1> 函数原型:int setjmp(jmp_buf buffer) ;void longjmp(jmp_buf buffer, int flag) ;2> 头文件:#include <setjmp.h>3> 参数:略4> 返回值:略5> 备注:1> 现利用setjmp保存一个状态2> 利用longjmp恢复保存的状态1: 系统调用:读一个文件函数原型:ssize_t read(int fd, void *buf, size_t size) ;头文件:#include <unistd.h>参数:略返回值:1> < 0 :出现I/O错误2> = 0 :达到文件结尾3> > 0 :返回读到的实际字节数备注:略2:系统调用:写入一个文件函数原型:ssize_t write(int fd, void *buf, size_t size) ;头文件:#include <unistd.h>参数:略返回值:1> < 0 :出现I/O错误2> > 0 :返回写入的实际字节数目----------------------------------注意:当返回值不等于size时,则出现I/O错误备注:略3:系统调用:返回本进程的ID函数原型:pid_t getpid() ;头文件:#include <unistd.h>参数:无返回值:1> > 0 :返回本进程ID2> < 0 :出现错误备注:无4:系统调用:返回本进程的组ID函数原型:gid_t getgid() ;头文件:#include <unistd.h>参数:无返回值:1> < 0 :出现错误2> > 0 :返回组ID5:系统调用:复制一个文件描述符(一个参数)函数原型:int dup(int fd) ;头文件:#include <unistd.h>参数:略返回值:1> < 0 :出现错误2> >= 0 :返回一个文件描述符备注:此函数的结果就是两个文件符指向一个相同的文件6:系统调用:复制一个文件描述符(两个参数)函数原型:int dup(int fd1, int fd2) ;头文件:#include <unistd.h>参数:fd1 :已知的fdfd2 :要复制到的fd返回值:1> <0 :出现错误2> >=0 :调用成功备注:此函数的分成三种情况:1>若fd2已经打开,且fd2 != fd1,则先将fd2关闭2>若fd2已经打开,且fd2 == fd1,则直接返回3>若fd2没有打开,则直接复制7:系统调用:获取文件属性的三个函数函数原型:int stat(const char *pathname, stat *buf) ;int fstat(int fd, stat *buf) ;int lstat(int fd, stat *buf) ;头文件:#include <sys/types.h>#include <sys/stat.h>参数:略返回值:如果返回负数,则调用失败备注:当操作的文件是一个链接文件时1>stat和fstat返回的是链接指向文件的属性2>lstat返回的是链接文件本身的属性8:系统调用:判断文件类型的几个宏(Question:参数)头文件:(Question)普通文件:S_ISREG()目录文件:S_ISDIR()链接文件:S_ISLNK()块设备:S_ISBLK()字符设备:S_ISCHR()管道:S_ISFIFO()SOCKET :S_ISSOCK()9:系统调用:测试文件存取模式函数原型:int access(const char *pathname, int mode)头文件:#include <unistd.h>#include <fcntl.h>#include <sys/types.h>参数:mode的取值情况:---------------1> 存在:F_OK (文件是否存在)2> 可读:R_OK3> 可写:W_OK4> 执行:X_OK返回值:如果失败,返回一个负数备注:10:系统命令:置位设置-用户-ID位chmod u+s file11:系统结构:文件存储权限字S_ISUID 设置-用户-IDS_ISGID 用户-组 -IDS_ISIVX 粘住位S_IRUSR 用户相关S_IWUSRS_IXUSRS_IRGRP 组相关S_IWGRPS_IXGRPS_IROTH 其他用户相关S_IWOTHS_IXOTH12:系统函数:屏蔽标记函数函数原型:mode_t umask(mode_t masks) ;头文件:#include <unistd.h>参数:要屏蔽的存储方式字(mode_t)返回值:返回原来的屏蔽方式字备注:1>此函数如果出错,则不会返回2>这是UNIX中出错不会返回的仅有的几个函数之一13:系统调用:改变文件存取模式函数原型:int chmod(const char *pathname, mode_t mode) ;int fchmode(int fd, mode_t mode) ;头文件:#include <unistd.h>#include <sys/types.h>参数:略返回值:如果出错,则返回一个负数备注:fchmod可以设置一个已经打开文件的存储访问权限14:系统调用:截短文件的函数函数原型:int truncate(const char *pathname, off_t length) ;int ftruncate(int fd, off_t length) ;头文件:#include <unistd.h>#include <sys/types.h>参数:off_t (截短到该长度)返回值:如果失败,则返回一个负数备注:1>length可正可负2>可能出现“文件空洞”15:标准函数:设置流的缓冲类型函数原型:int setvbuf(FILE *fstream, void *buf, int mode, size_t size 头文件:#include <stdio.h>参数:buf :if buf==NULL,则由系统来分配缓存,叫做系统缓存if buf!=NULL,则来使用分配的缓存,叫做用户缓存size:分配的用户缓存大小mode:_IOFBF :I/O全缓存_IOLBF :I/O行缓存_IONBF :I/O不缓存参数:如果失败,则返回一个负数16:标准函数:缓冲流函数原型:int fflush(FILE *fstream) ;头文件:#include <stdio.h>参数:if fstream == NULL,则强制刷新全部流if fstream != NULL,则刷新特定流返回值:如果失败,则返回一个负数17:标准函数:打开文件的三个函数函数原型:FILE* fopen(const char *pathname, char *mode) ;FILE* fropen(const char *pathname, char *mode) ;FILE* fdopen(int fd, char *mode) ;头文件: #include <stdio.h>参数:略返回值:略备注:1> fopen :路径 FILE*2> fropen :重新打开一个文件3> fdopen :把FILE* 和一个fd联系起来I/O的几种type类型1> r :为读而打开2> r+ :为读和写而打开3> w :使文件长度称为0,或者为写而创建文件4> w+ :使文件长度成为0,为读和写而打开5> a :添加,为在文件尾写而打开或者为了写而创建文件6> a+ :为在文件尾读和写而打开或创建19:标准函数:关闭一个文件流函数原型:int fclose(FILE* fstream) ;头文件:#include <stdio.h>参数:略返回值:如果出错,返回一个负数备注:系统在关闭一个文件时,会自动刷新该文件相关的流1> 输入数据:全部被抛弃2> 输出数据:全部被刷新20:标准函数:读取一个字符(三个)函数原型:int getchar() ;int getc(FILE *fstream) ;int fgetc(FILE *fstream) ;头文件:#include <stdio.h>参数:略返回值:1> EOF :文件结束2> >=0 :读取的字符的ASCII码3> <0 :出现错误备注:1>getc和fgetc的区别getc是一个宏2>返回值一定要用int类型,不是char类型3>三个函数遇到文件结束或者I/O错误时,都会返回负数,这个时候应该用两个函数来判断是那种情况:feof(FILE *fstream) ; // 是否文件结尾?ferror(FILE *fstream) ; // 是否出现错误?21:标准函数:测试是否到达一个文件流的结束函数原型:int feof(FILE *fstream) ;头文件:#include <stdio.h>参数:略返回值:略22:标准函数:测试一个文件流是否出现错误函数原型:int ferror(FILE *fstream) ;头文件:#include <stdio.h>参数:略返回值:略23:标准函数:字符回送函数函数原型:int ungetc(int c, FILE *fsteam) ;头文件:#include <stdio.h>参数:略返回值:1>如果回送成功,则返回字符c2>如果失败,则返回一个负数24:标准函数:字符输出函数函数原型:int putchar(int c) ;int putc(int c, FILE *fstream) ;int fputc(int c, FILE *fstream) ;头文件:#include <stdio.h>参数:略返回值:如果失败,则返回一个负数备注:其他相关事项和put类型相同25:标准函数:每次一行I/O的输入函数函数原型:int fgets(const char *buf, size_t size, FILE *fstream) ;头文件:#include <stdio.h>参数:略返回值:1>如果成功,返回实际写入的字节数2>如果返回值和size不相等,则出现错误26:标准函数:每次一行I/O的输出函数函数原型:int fputs(const char *buf, FILE *fstream) ;头文件:#include <stdio.h>参数:略返回值:1> >=0 :返回实际读取的字节数2> <0 :说明达到文件末尾或者出现错误备注:1>fgets函数中,如果缓存大小是size,则最多可以存放n-1个字符(包括‘\n’符号)2>fputs函数中,系统推荐在buf[size-2]字符=’\n’,但是并不强制这样做27:标准函数:读二进制文件或者数据类型函数原型:int fread(void *buf, size_t objsize, int objnum, FILE *fs 头文件:#include <stdio.h>参数:buf :缓存首地址objsize :一个字节所占的字节数目objnum :对象的数目返回值:1> >=0 :返回读到的对象数目2> <0 :到达文件终止或者出现错误备注:此函数可对数据操作或者二进制文件进行相关操作28:标准函数:写二进制文件或者数据类型函数原型:int fwrite(const void *buf,size_t size, int num, FILE *f) 头文件:#include <stdio.h>参数:buf :缓存首地址objsize :一个字节所占的字节数目num :要写入的字节数目返回值:如果返回值和num不相等,那么就出现了错误备注:fread和fwrite函数是有局限性的,因为各种操作系统同一种类型所占的空间大小也是有区别的29:标准函数:定位流函数函数原型:int fseek(FILE *fstream, long offset, int whence) ;头文件:#include <stdio.h>参数:offset :偏移量whence :从什么地方开始(SET,END,CURSOR)返回值:如果定位失败,则返回一个负数30:标准函数:重置文件流函数原型:int rewind(FILE *fstream)头文件:#include <stdio.h>参数:略返回值:略31:标准函数:建立临时文件(两个)函数原型:char* tmpnam(char *str) ;FILE* tmpfile(void) ;头文件:#include <stdio.h>参数:if (str == NULL)路径名会存储在str中if (str != NULL)路径名存储在系统的静态空间里面返回值:tmpnam :返回临时文件的路径名tmpfile :返回临时文件的指针-------------- From : Advanced Programming In UNIX Environment (1-5)----- ------。