赞
踩
文件使用方式:打开文件→文件读/写→关闭文件
int open(filename,int flags);
int open(filename,int flags,mode_t mode);
标志 | 含义 |
---|---|
O_RDONLY | 以只读的方式打开文件 |
O_WRONLY | 以只写方式打开文件 |
O_RDWR | 以读写方式打开文件 |
O_APPEND | 以追加的方式打开文件 |
O_CREAT | 如没有要打开的文件,创建该文件 |
O_EXEC | 若使用了O_CREATE而且文件以及存在,就会发生一个错误 |
O_NOBLOCK | 以非阻塞的方式打开一个文件 |
O_TRUNC | 若文件已经存在,则删除文件的内容 |
mode
为八进制数表示文件权限,例如:0640
表示-rw-r-----
打开文件示例:
open("test",O_RDONLY|O_CREATE,0640); //成功则返回一个文件描述符,否则返回-1
文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。
文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象关联,这些信息被称作文件的上下文。
内核利用文件描述符(file descriptor)来访问文件,在形式上它是一个非负整数,代表一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。习惯上,标准输入(standard input)的文件描述符是0,标准输出(standard output)是1,标准错误(standard error)是2。POSIX定义了STDIN_FILENO
、STDOUT_FILENO
和STDERR_FILENO
来代替0、1、2,这三个符号常量位于头文件unistd.h
中。
ssize_t read(int fd, void * buf, size_t count);
说明:从文件描述符fd所指文件中读取count字节的数据,放到缓冲区buf中。如果成功则返回读取的字节数,出错返回-1;若在调read之前已到达文件末尾,则这次read返回0。
ssize_t write (int fd, const void * buf, size_t count);
说明:将缓冲区buf
中count
个字节写入文件描述符fd
所指文件中去。若调用成功返回实际写入的字节数;若发生fd
有误或者磁盘已满等问题,返回值 < count
;若没有写出任何数据,则返回值为0
;调用不成功返回-1
,并将错误代码存入errno
中。
int close(int fd); //成功返回0,否则返回-1
关闭文件和打开文件是配对的,即打开的文件最好要显式的关闭。
编程,打开文件a.txt,将文件中的内容复制到文件b.txt中
#include<stdio.h> #include<fcntl.h> //文件信息控制 #include<unistd.h> //类UNIX系统的系统调用 #include<stdlib.h> #define count 1 int main(int argc,char*argv[]) { int fd1,fd2; long len=0; char *p,ch; p=(char*)malloc(sizeof(char)*count); //指向缓冲区 fd1=open("a.txt",O_RDONLY); //以只读方式打开文件 if(fd1==-1){ //打开失败 printf("Open a.txt fail!"); exit(1); } fd2=open("b.txt",O_RDWR|O_CREAT|O_TRUNC,0640);//可读可写方式 if(fd2==-1){ printf("Open b.txt fail!"); exit(1); } while(read(fd1,p,count)==1){ //读取一个字符到p所指向的空间 write(fd2,p,count); //向fd写入数据 len++; } close(fd1); close(fd2); free(p); //释放空间 return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。