int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
返回值:文件描述符
pathname: 要打开或创建的目标文件
flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。
参数:
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR : 读,写打开
这三个常量,必须指定一个且只能指定一个
O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问 权限
O_APPEND: 追加写
int close(int fd);
fd:文件描述符
ssize_t write(int fd, const void *buf, size_t count);
int main()
{
int fd = open("log.txt", O_WRONLY | O_CREAT | O_TRUNC,0666 );
int count=5;
char buf[]="这是个测试\n";
while(count--)
{
write(fd,buf,strlen(buf));
}
close(fd);
return 0;
}
ssize_t read(int fd, void *buf, size_t count);
int main()
{
int fd = open("log.txt", O_RDONLY,0666 );
char ch[128];
ssize_t s= read(fd,ch,sizeof(ch)-1);
if(s>0)
{
ch[s]=0;
}
printf("%s",ch);
close(fd);
return 0;
}
Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入0, 标准输出1, 标准错误2.
0,1,2对应的物理设备一般是:键盘,显示器,显示器
进程是如何管理打开的文件的?
进程内部有过管理文件指针的数组,当我们增加打开的文件时,就会从头遍历,找到没有使用的下标,分配给新文件
(注:如果文件关闭的话,下标会被回收,给下一个打开的文件)