Linux应用程序开发学习(一)文件IO操作
时间:2010-05-19 来源:ruixiang
在DM365开发板来之前,准备重新把Linux应用程序开发的部分温习一遍,不必细看,捡其重要部份摘之。以国嵌视频为主,华清的两本应用开发书为辅,APUE为后续参考。
一,文件IO操作
(一)系统调用
1,creat函数,int creat(const char *filename, mode_t mode)
创建文件。参数1为文件名,参数2为创建模式(如0777),表示文件的所有者,所在组,其它者对文件的可读可写可执行的权限。
2,open函数,int open(const char *pathname, int flags, mode_t mode)
打开文件。两种调用方式,区别在于多一个参数3。参数1为文件名,参数2为标志(O_RDONLY只读,O_RDWR读写,O_CREAT如不存在则创建,O_NOBLOCK非阻塞),参数3为创建模式。如果使用了O_CREAT标志,则必需加上参数3,其余不需。成功后返回一个文件描述符fd。注意区分标志的模式中的读写相关的设定,标志只说明此次操作是什么行为,即使模式指定了文件是可读写的,但假如这一次open设定标志为只读,那在此次操作中是不可写的。
3,close函数,int close(int fd)
关闭一个文件。参数是open调用后返回的文件描述符。
4,read函数,int read(int fd, const void *buf, size_t length)
从fd指定的文件中读一段数据放到buf中。参数1为文件描述符,参数2为读取的数据放在哪个缓冲区,参数3是欲读取的字节数。返回值是实际读到的字节数。
5,write函数,int write(int fd, const void *buf, size_t length)
把buf中的某段数据写到fd指定的文件中。参数1为文件描述符,参数2为要写的数据放在哪个缓冲区,参数3是欲写入的字节数。返回值是实际写入的字节数。
6,lseek函数,int lseek(int fd, offset_t offset, int whence)
将文件读写指针相对whence移动offseet个字节。参数1为文件描述符,参数2为移动的字节数,可取负值表示向前移动,参数3是读写指针所在位置,可取SEEK_SET相对文件开头,SEEK_END相对文件末尾,SEEK_CUR相对当前读写指针位置。返回值是文件指针相对于文件头的位置。
7,access函数,int access(const char *pathname, int mode)
判断文件是否可进行读写等操作。参数1为文件名,参数2为要判断的操作组合,如R_OK文件可读,F_OK文件存在等。测试成功时返回0,有任意一个不满足返回-1。
8,fstat/stat函数,int fstat(int fd, struct stat *buf)/int stat(const char *file_name, struct stat *buf)
将文件状态返回到buf结构体中,比如文件大小等,功能强大。两函数不同处在于参数1是文件名还是文件描述符。
9,getcwd函数,char *getcwd(char *buffer, size_t size)
把当前路径存放到buffer中,如果缓冲区太小,返回-1。
10,mkdir函数,int mkdir(char *dir, int mode)
创建一个新目录。
(二)C库函数
1,fopen函数,FILE *fopen(const char *filename, const char *mode)
打开文件。参数1为文件名,参数2为打开模式,如r,rb,w,wb,w+,r+,a+,b用来区分二进制文件和文本文件,但linux系统不区分,所以参数中的b可以不用加。
2,fclose函数,int fclose(FILE *stream)
关闭文件。
3,fread函数,size_t fread(void *ptr, size_t size, size_t n, FILE *stream)
从文件读取数据。从stream文件中读取n个字段,每个字段size个字节,读到ptr缓冲区中。返回值是实际读到的字节数。
4,fwrite函数,size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream)
写数据到文件。从ptr缓冲区中读取n个字段,每个字段size个字节,写到stream文件中。返回值是实际写入的字节数。
5,fgetc函数,int fgetc(FILE *stream)
从文件中读一个字符。
6,fputc函数,int fputc(int c, FILE *stream)
写一个字符到文件。
7,fscanf函数,int fscanf(FILE *stream, char *format[,argument...])
从一个流中进行格式化输入。
8,fprintf函数,int fprintf(FILE *stream, char *format[,argument...])
格式化输出到一个流中。与之类似的有一个重要的sprintf函数,参数1换成一个字符串指针,也就是格式化输出到一个字符串指针中。
9,fseek函数,int fseek(FILE *stream, long offset, int whence)
移动文件读写指针。
10,ftell函数,long ftell(FILE *stream)
返回当前文件读写指针。通常先用fseek将读写指针置尾,再调用此函数得到文件大小,再用fseek将指针置首恢复。
11,feof函数,int feof(FILE *stream)
检测流上的文件结束符,若到结尾则返回1。