Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43306
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 330
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-28 17:39
文章分类
文章存档

2015年(31)

我的朋友

分类: C/C++

2015-11-01 12:10:48

一.基于文件指针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) |
0

上一篇:模块

下一篇:信号

给主人留下些什么吧!~~