第三章 文件IO
一,概念介绍
文件I/O:就是指不带缓存的I/O,每个read和write都调用内核中的一个系统调用。从本章的各个函数中可以看出,我们在调用函数时没有指明缓存。与它对应的就是标准I/O了,到第5章才会介绍。
文件描述符:用文件I/O对文件进行操作时都要用到文件描述符,它是一个可用的最小非负整数。例如你打开文件后得到的文件描述符是4,那说明0,1,2,3一定正在使用,而4~MAX一定没有被使用。文件描述符的概念非常重要,多数底层操作都要用到文件描述服。
文件如何共享:图
原子操作:由多步组成的操作(函数集合),原子操作若执行则函数集全部执行,不可能是执行函数集的子集。原子,不可分割的。为防止出现错误,原子操作是由系统内核一步完成的,不被系统调度程序分割。
二,函数运用
1,open,creat,close
//-----------open.c----------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "ourhdr.h"
#include "err_error.h"
main()
{
int fd1,fd2,fd3;
//以读写方式打开文件open.c
if((fd1=open("open.c",O_RDWR))==-1)
err_sys("open error");
//用open创建一个文件123.txt并可读写,访问权限是644(在ourhdr.h中定义为FILE_MODE)
if((fd2=open("123.txt",O_RDWR | O_CREAT | O_TRUNC,0644))==-1)
err_sys("open creat error");
//用creat创建一个文件456.txt并可读写,访问权限是700
if((fd3=creat("456.txt",FILE_MODE))==-1)
err_sys("creat error");
close(fd1);
close(fd2);
close(fd3);
}
//-------------end------------------------
king@king-laptop:~/blog$ gcc -o open open.c
king@king-laptop:~/blog$ ls
err_error.h open open.c ourhdr.h
king@king-laptop:~/blog$ ./open
king@king-laptop:~/blog$ ls 多文件喽
123.txt 456.txt err_error.h open open.c ourhdr.h
king@king-laptop:~/blog$ ls -l
总用量 24
-rw-r--r-- 1 king king 0 2009-02-06 15:01 123.txt 它的权限可是644哦
-rw-r--r-- 1 king king 0 2009-02-06 15:01 456.txt
-rw-r--r-- 1 king king 1080 2009-02-06 14:59 err_error.h
-rwxr-xr-x 1 king king 8691 2009-02-06 15:00 open
-rw-r--r-- 1 king king 606 2009-02-06 15:00 open.c
-rw-r--r-- 1 king king 3811 2009-02-06 14:59 ourhdr.h
king@king-laptop:~/bolog$