当前位置: 首页 > >

Linux文件操作函数接口

发布时间:

一、系统调用和设备驱动程序

???????只需用很少的函数就可以对文件和设备进行访问和控制,这些函数称为系统调用,由UNIX和Linux直接提供,它们也是通向操作系统本身的接口。


?????? 操作系统的核心部分,即内核,是一组设备驱动程序。它们是一组对系统硬件进行控制的底层接口。


二、系统调用函数接口

1、size_t?? write(int?? fildes,const? void *buf,size_t nbytes);


函数说明:将缓冲区buf的前nbytes个字节写入与文件描述符fildes关联的文件中。返回实际写入的字节数,如果出错返回-1。


头文件:#include??


?


2、size_t??? read(int??? fildes,void? *buf,size_t?? nbytes);


函数说明:从与文件描述符fildes相关联的文件里读入nbytes个字节的数据,并把他们放到数据区buf中。返回实际读入的字节数,如果出错返回-1。


头文件:#include??


?


3、int?? open(const? char? *path,int? oflags);


???? int??? open(const? char? *path,int? oflags,mode_t? mode);


?函数说明:建立了一条到文件或设备的访问路径。返回与文件相关联的文件描述符。


头文件:#include??


?


4、int?? close(int?? fildes)


函数说明:终止文件描述符fildes与其相对应文件之间的关联。文件描述符被释放并能够被重新使用。调用成功返回0,失败返回-1。


头文件:#include???


?


5、int?? ioctl(int?? fildes,int?? cmd,....)


函数说明:提供了一个用于控制设备及其描述符行为和配置底层服务的接口。



头文件:#include??


?


6、off_t?? lseek(int?? fildes,off_t?? offset,int??? whence)



函数说明:对文件描述符fildes的读写位置进行设置。读写指针既可设置为文件中的某个绝对位置,也可以设置为相对于当前位置或文件尾的某个相对位置。返回从文件头道文件指针位置的字节偏移值,失败时返回-1。


头文件:#include?? ?


????????????? #include??


?


7、int?? fstat(int?? fildes,struct? stat?? *buf)


??????int?? stat(const? char? *path,strcut? stat? *buf)


??????int???lstat(const??char? *path,struct? stat? *buf)?


函数说明:返回与文件描述符相关的文件的状态信息,该信息将会写到一个buf结构中。stat和lstat返回相同的结果,但当文件时一个符号链接时,lstat返回的是该符号链接本身的信息,而stat返回的是该链接指向的文件的信息。


头文件:#include??


????????????? #include???


????????????? #include????


?


8、int?? dup(int?? fildes)


????? int???dup2(int?? fildes,int?? fildes2)


函数说明:提供了一种复制文件描述符的方法,使我们能够通过两个或者更多个不同的描述符来访问同一个文件


头文件:#include???


?


三、标准IO库

1、 FILE?? *fopen(const?? char? *filename,? const? char? *mode)


函数说明:打开由filename参数指定的文件,并把它与一个文件流关联起来。失败时返回NULL值


头文件:#include??


?


2、size_t?? fread(void? *ptr,size_t?? size,size_t?? nitems,FILE? *stream)


函数说明:用于从一个文件流里读取数据。size参数指定每条数据记录的长度,计数器nitems给出要传输的记录个数。它的返回值是成功读到数据缓冲区里的记录个数。


头文件:#include??


?


3、size_t?? fwrite(const? void? *ptr,size_t? size,size_t? nitems,FILE? *stream)


函数说明:从指定的数据缓冲区里取出数据记录,并把它们写到输出流中,返回值是成功写入的记录个数。


头文件:#include??


?


4、int? fclose(FILE? *stream)


函数说明:关闭指定的文件流stream,使所有尚未写出的数据都写出(因为stdio库会对数据进行缓冲,所以fclose很重要)。


头文件:#include??


?


5、int? fflush(FILE? *stream)


函数说明:把文件流里所有未写出的数据立刻写出。fclose函数隐含执行了一次flush操作。


头文件:#include??


?


6、int? fseek(FILE? *stream,long? int? offset,int? whence)


函数说明:fseek函数是与lseek系统调用对应的文件流函数。与lseek不同的是,fseek返回的是一个整数,0代表成功,-1表示失败。


头文件:#include??


?


7、int?? fgetc(FILE? *stream)


????? int? getc(FILE? *stream)


????? int? getchar()


函数说明:从文件流取出下一个字节,并把它作为一个字符返回,当它到达文件尾或出现错误时,它返回EOF。



头文件:#include?? ??


?


8、int? fputc(int? c,FILE? *stream)


????? int? putc(int? c,FILE? *stream)


????? int?? putchar(int? c)


函数说明:把一个字符写到文件流中,返回写入的值,如果失败返回EOF。


头文件:#include?? ??


?


9、char? *fgets(char *s,int? n,FILE? *stream)


????? char? *gets(char? *s)


函数说明:从文件流stream里读取一个字符串? fgets把读到字符写到s指向的字符串里,直到出现下面某种情况:遇到换行符;已经传输了n-1个字符,或者到达文件尾。它会把遇到的换行符也传递到接收字符里,再加上一个表示结尾的空字符。返回值是指向字符串s的指针,如果文件尾已经到达文件尾或者出现读错误,fgets返回一个空指针。



头文件:#include?? ??


?


10、int? printf(const?? char? *format,.....)


??????? int? sprintf(char? *s,const? char? *format,......)


??????? int? fprintf(FILE? *stream,const? char? *format,......)


头文件:#include?? ?


?


?


四、文件流错误

??????? 许多stdio库函数会返回一个超出范围的值,错误由外部变量errno指出。


??????? #include?? ?????? extern?? int?? errno;


1、int?? ferror(FILE? *stream)


函数说明:测试一个文件流的错误标识,若标识被设置就返回一个非零值,否则返回0


2、int?? feof(FILE? *stream)?


函数说明:测试一个文件流的文件尾标识,如标识被设置就返回一个非零值,否则返回0


3、void?? clearerr(FILE?? *stream)


函数说明:清除由stream指向的文件流的文件尾标识和错误标识


?


?


五、文件和目录的维护

1、int?? chmod(const?? char? *path,mode_t??? mode)


头文件:#include??


?


2、int?? chown(const?? char ?*path,uid_t?? owner,gid_t?? group)


头文件:#include??


????????????? #include???


?


3、int?? unlink(const?? char? *path)


函数说明:删除一个文件的目录项并减少它的链接数。成功返回0,失败返回-1。


头文件:#include??


?????? 如果一个文件的链接数减少到零,并且没有进程打开它,这个文件就会被删除。事实上,目录项总是立刻被删除,但是文件锁占用的空间要等到最后一个进程关闭它之后才会被删除。rm程序使用的就是这个调用。文件上其他的链接表示这个文件还有其他名字,这通常是由ln程序创建的。


4、int?? link(const? char?? *path1,const? char? *path2)


????? int? symlink(const? char? *path1,const?? char? *path2)


函数说明:link是指创建一个指向已有文件path1的新硬链接。symlink是指创建一个指向已有文件path2的符号链接。


头文件:#include??


?


5、int? mkdir(const? char? *path,mode_t?? mode)


头文件:#include??


????????????? #include??


?


6、int?? rmdir(const? char? *path)


头文件:#include??


?


7、int?? chdir(const? char? *path)


????? char? *getcwd(char? *buf,size_t? size)


头文件:#include??


?


8、? DIR?? *opendir(const?? char? *name)


函数说明:打开一个目录,并建立一个目录流,如果成功返回一个指向DIR结构的指针


头文件:#include???


????????????? #include????


?


9、struct? dirent? *readdir(DIR? *dirp)


函数说明:返回一个指针,该指针指向的结构里保存着目录流dirp中下一个目录项的有关资料。后续的readdir调用将返回后续的目录项。如果发生错误或者到达目录尾,返回NULL。


头文件:#include??


????????????? #include???


?


六、错误处理

1、char?? *strerror(int?? errnum)


函数说明:把错误代码映射为一个字符串,该字符串对发生的错误类型进行说明。


头文件:#include???


?


2、void? perror(const?? char? *s)


函数说明:把error变量映射到一个字符串,并把它输出到标准错误输出流。该字符串的前面先加上字符串s(如果不为空)中给出的信息,再加上一个冒号和一个空格。


头文件:#include??


?




友情链接: