一.基于文件指针FILE *
linux文件类型有:普通,管道,目录,设备,符号链接,套接字
1.打开:
FILE *fopen(const char *path, const char *mode);
mode:rb, r+b, wb, w+b, ab, a+b;
2.关闭:
int fclose(FILE *stream);
3.读写:
3.1块:
//从文件stream中读nmemb*size个字节到ptr
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
//将ptr处的nmemb*size个字节写到文件stream中
size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);
3.2格式化读写:
int printf(const char *format, ...); //相当于int fprintf(stdout, format, ...);
int scanf(const char *format, ...); //相当于int scanf(stdin, format, ...);
int fprintf(FILE * stream, const char *format, ...);
int fscanf(FILE * stream, const char *format, ...);
int sprintf(char * str , const char *format, ...);
int sscanf(char* str , const char *format, ...);
3.3单个字符:
int fgetc(FILE *stream);
int fpuc(int c, FILE *stream);
int getc(FILE *stream); //i相当于int fgetc(FILE *stream);
int putc(int c, FILE *stream); //相当于int fpuc(int c, FILE *stream);
int getchar(void); //相当于fgetc(stdin)
int putchar(int c); //相当于fputc(c, stdout)
3.4
字符串
char *fgets(char *s, int size, FILE *stream);
int fputs(const char *s, FILE *stream);
char *gets(char *s);
int puts(const char *s); //行尾自动增加换行符
3.5定位:
int feof(FILE *stream);
int fseek(FILE *stream, long offset, int whence); //文件指针移到离开头0,当前1,结尾2处offset个位置;
long ftell(FILE *stream); //当前
void rewind(FILE *stream); //指针移到文件开头
3.6其他
FILE *freopen(const char *filename, const char *mode, FILE *stream); //改变stream相关联的文件
int ffflush(FILE *stream);
int rename(const char *oldname, const char *newname);
FILE *tmpfile(void); //以w+的形式创建一个临时的文件,关闭或程序退出时自动删除
int ungetc(int c, FILE *stream);//回写一个字符到stream中
void fgetpos(FILE *stream, fops_t *ptr);
void fsetpos(FILE *stream, const fops_t *ptr);
void perror(const char *s);
int ferror(FILE *stream);
void feof(FILE *stream);
二.文件描述符
2.1打开
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);
flags:
O_RDONLY, O_WRONLY,O_RDWR,O_CREAT,O_APEND,
O_TRUNC--->文件长度截至0
O_SYNC--->同步打开文件,只有数据真正写入到物理设备后才返回
O_NONBLOCK---->非阻塞打开,立即返回
mode:
权限,可以直接用数字
2.2读写
ssize_t read(int fd, void I*buff, size_t count);
ssize_t write(int fd, void I*buff, size_t count);
2.3
off_t lseek(int fd, off_t offset, int whence);
int ftuncate(int fd, off_t length); //改变文件的大小,文件比设置的length大则删除大的部分,
int stat(const char *file_name, struct stat *buf);
int fstat(int fd, struct stat *buf);
//struct stat结构体有文件的相关信息
2.4
文件描述符的复制
int dup(int fdold); //系统返回一个可用的最小文件描述符fdnew,指向同一个文件。关闭两个描述符后文件正式关闭
int dup2(int fdold, int fdnew); //文件描述符由用户指定,如果fdnew指向的是一个已经打开的文件,内核先关掉fdneww指向的这个文件,再将fdnew指向fdold所指的文件。
三select:
int select(int maxfd, fd_set *readset, fd_set *writeset, fd_set *exceptionset, const struct timeval *timeout);
maxfd:所有的描述符中最大的一个+1
readset:读描述符集合
writeset:写描述符集合
exception:异常描述符集合
timeout:数值--->等待描述符的时间(0就是表示不等的时间为0,马上返回),NULL--->一直等待,
void FD_ZERO(fd_set *fdset); //清空集合
void FD_SET(int fd, fd_set *fdset); //增加一个fd
void FD_CLR(int fd, fd_set *fdset); //删除
void FD_ISSET(int fd, fd_set *fdset); //判断fd是否有设置
struct timeval
{
long tv_sec;
long tv_usec;
};
阅读(610) | 评论(0) | 转发(0) |