int open(const char * pathname,int flages,mode_t mode)
pathname:带路径的文件名
mode:若有可能创建新文件则需要指定文件权限
flags:选项参数
必选项:O_RDONLY/O_WRONLY/O_RDWR 只读/只写/可读可写 --三种只能选择其一
可选项:
O_CREAT 文件不存在则创建新文件,存在则打开(使用这个必须用mode,加上权限)
O_EXCL 跟O_CREAT同事使用,若文件不存在则创建,存在则报错
O_TRUNC 打开文件的同时截断文件(清空文件原有内容)
O_APPEND 写入数据的时候总是追加在文件末尾
w+:O_RDWR | O_CREAT | O_TRUNC ☺
a+:O_RDWR | O_APPEND | O_CREAT
open返回值:文件的操作句柄—文件描述符(正整数)
ssize_t write(int fd,const void * buf,size_t count)
fd:文件描述符
buf:要写入文件的数据缓冲区首地址
count:要写入的数据长度
返回值:实际写入文件中的数据字节长度(不一定等于count),失败返回-1.
ssize_t read(int fd,void * buf,size_t count)
fd:文件描述符
buf:缓冲区首地址,放入取到的数据
count:要读取的数据长度,大小不能大于缓冲区大小
返回值:实际读取文件中的数据字节长度(不一定等于count),返回0表示读到文件末尾,失败返回-1.
#include <stdio.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4 #include <fcntl.h>
5
6 int main()
7 {
8 int fd = open("./test.txt",O_RDWR | O_CREAT | O_TRUNC,0664);
9 if(fd < 0)
10 {
11 perror("open error");
12 return -1;
13 }
14 char str[32] = "this is a real world!\n";
15 int num = write(fd,str,15);
16 if(num < 0)
17 {
18 perror("write error");
19 return -1;
20 }
21 int ret = read(fd,str,10);
22 if(ret < 0)
23 {
24 perror("read error");
25 return -1;
26 }
27 close(fd);
28 return 0;
29 }
int close(int fd) :关闭文件,释放资源.
fd与FILE:
fd:文件描述符,int类型的整数,就是struct files_struct中的指针数组struct file fd_array[]的某一个元素的下标,存放的是文件的描述信息,进程可以通过这个下标找到文件的描述信息,进而操作文件。
C程序通常使用不同的FILE结构体来管理每个文件,实际上FILE是间接的操作系统的文件控制块(FCB)来实现对文件的操作。
不论是Linux还是Windows,FILE 存放的都是open出的原始的fd与别的文件信息。**