函数接口
系统IO
1.open
open("1.c",O_WRONLY|O_CREAT,0666 );
int open(const char *pathname, int flags,int mode);
功能:
获得一个文件描述符
参数:
pathname:文件名
flags:
必须项:他们之间是互斥的,所以有且只能有一个
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
可选项:
O_CREAT, 创建文件 //这个标志量存在,则需要指定参数 mode(权限)
O_EXCL, 需要和O_CREAT同时使用,表示新建的文件不存在,成功,否则open就会失败
O_TRUNC 文件内容清空
O_APPEND 追加
//后面
O_NOCTTY,不是终端设备
O_ASYNC 异步io,什么时候io不确定,
O_NONBLOCK 非阻塞
open("1.txt",O_WRONLY|O_CREAT,0666);
文件最终权限
r w x r w x r w x
1 1 0 1 1 0 1 1 0 666
~umask
1 1 1 1 1 1 1 0 1 ~002
---------------------
1 1 0 1 1 0 1 0 0 664
最终文件的权限
~umask & 0666
返回值:
成功返回文件描述符 (最近最小未使用)
失败返回-1
2.write
char buf[1024];
ssize_t write(int fd, const void *buf, size_t count);
功能:
通过文件描述符向文件中写一串数据
参数:
fd:文件描述符
buf:要写入文件的字符串的首地址
count:要写入字符的个数
返回值:
成功返回实际写入的个数
失败返回-1
Stdin->fileno
Stdout->fileno
3.read
ssize_t read(int fd, void *buf, size_t count);
功能:
通过文件描述符读取文件中的数据
参数:
fd:文件描述符,要读取的文件
buf:存放数据空间的首地址
count:要读到数据的个数
返回值:
成功返回读到数据的个数
失败返回-1
读到文件结尾返回0
4.lseek
off_t lseek(int fd, off_t offset, int whence);
功能:
定位文件的位置
参数:
fd:文件描述符
offset:偏移量
正:向后偏移
负:向前偏移
零:不偏移
whence:
SEEK_SET
SEEK_CUR
SEEK_END
正 空洞
返回值:
成功返回偏移量
失败返回-1
lseek(fd,0,SEEK_END);
off_t len =lseek(fd,0,SEEK_END); //获取到文件的大小
注意:
1、不支持O_APPEND的追加模式,无法生成空洞文件。
2、lseek函数执行失败,文件指针还在偏移前的位置。
3、lseek函数在设备文件上偏移无效。
4、fifo,socket
系统IO和文件IO转换
fileno FILE* fp -> int fd
int fileno(FILE *stream);
功能:
获得一个文件流指针中的文件描述符
参数:
stream:文件流指针
返回值:
成功返回文件描述符
失败返回-1
fdopen int fd -> FILE *fp
FILE *fdopen(int fd, const char *mode);
功能:
将文件描述符转化为文件流指针
参数:
fd:已经打开的文件描述符
mode:
"r"
"r+"
"w"
"w+"
"a"
"a+"
返回值:
成功返回文件流指针
失败返回NULL
目录操作
1.opendir
DIR *opendir(const char *name);
功能:
打开一个目录获得一个目录流指针
参数:
name:目录名
返回值:
成功 返回目录流指针
失败 返回NULL
2.readdir
struct dirent *readdir(DIR *dirp);
功能:
从目录流中读取文件信息并将保存信息的结构体
地址返回
参数:
dirp:目录流指针
返回值:
包含文件信息的结构体
出错或者读到目录流末尾返回 NULL
On Linux, the dirent structure is defined as follows:
struct dirent {
ino_t d_ino; /* inode number * 索引节点号/
off_t d_off; /* offset to the next dirent */
unsigned short d_reclen; /* length of this record */
unsigned char d_type; /* type of file;
not supported
by all file system types */
char d_name[256]; /* filename */
};
3、关闭目录
int closedir(DIR *dirp);
功能:关闭之前已经打开的目录流对象
参数:
opendir的返回结果中目录流对象
返回值:
成功 0
失败 -1;