linux系统中,所有打开的文件都对应一个文件描述符,本身是一个非负整数,0-19,so允许每个进程最多能打开20个文件,现在绝大多数的能打开1024个
编程总结:
(1)main(int argc,char*argv[])//argc是整型,表示实际参数的个数。argv表示字符出指针数据
(2)(fd=open(argv[1],O_CREAT|O_RDWR,0755))<0
//如果flag参数里有O_CREAT表示,该文件如果不存在,系统则会创建该文件,该文件的权限由第三个参数决定,此处为0755
//如果flah参数里没有O_CREAT参数,则第三个参数不起作用.此时,如果要打开的文件不存在,则会报错.
//所以fd=open(argv[1],O_RDWR),仅仅只是打开指定文件
一系统调用系列
创建
int creat(const char *filename,mode_t mode)
名 模式
S_IXUSR 可执行 -》1
S_IWUSR 可写 -》2
S_IRUSR 可读 -》4
S_IRWXU 可读,可写,可执行-》7
3
755
文件所有者
文件所有者
4
系统调用打开
int open(const char *pathname,int flags)
int open(const char *pathname,intflags,mode_t mode)
pathname 要打开的文件名(包含路径,缺省为当前路径)
flags:打开标志
./file_open hello//打开hello文件,当前目录下没有会自动创建
5
系统调用-关闭
int close(int fd)
6
系统调用-读
int read(int fd,const void *buf,xize_t length)
从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回为实际读取的字节数。
7
系统调用-定位
int lseek(int fd,offset_t offset,int whence)
将文件读写指针相对whence移动offset个字节。
lseek(fd,0,SEEK_END)返回值就是文件的长度
读了四个字节,指针指到第四字节处,当读4个字节,从指针所在位置开始读四个字节(即5678)
可通过lseek指定位置开是读或者写
8
int access(const char*pathname,int mode)
判断文件是否可mode
R_OK文件可读
W_OK文件可写
X_OK文件可写
F_OK文件存在
实例讲分析
while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
(1)bytes_read=-1;表示读的时候出错返回-1;
(2)bytes_read=BUFFER_SIZE;表示读成功,且读出了BUFFER_SIZE大小的内容
(3)bytes_read>0;表示只读了一部分,继续读。
./file_cp s1 s2//把s1里的内容读出写到s2里
二库函数访问文件系列
1
库函数-创建和打开
FILE *fopen(const char *filename,const char *mode)
r,rb只读方式打开
w,wb只写方式打开,如果文件不存在,则创建该文件
2
在dos、Windows系统中b用于区分二进制文件和文本文件
Linux不区分二进制文件和文本文件
3
库函数-读
size_t fread(void *ptr,size_t size,size_t n,FILE*stream)
从stream 指向的文件读取N个字段,每个字段为size字节,并将读取的数据放入ptr所指的字符数组中,返回实际已读取的字节数。
4
库函数-写
size_t fwrite(const void *ptr,size_t size,size_t n,FILE*stream)
5
库函数-格式化读
fscanf(FILE*stream,char *format[])
fscanf(stdin,“%d”,&i)
从标准输入stdin读取整型,到地址为i处
6
库函数-格式化写
fprintf(stream,"%s%c",s,c)
以指定的格式从stream中写到s,c文件里去
7
库函数-定位
int fseek(FILE *stream,long offset,int whence)
文件描述类型 stream,相对基地址whence,偏移offset
8
路径获取
char*getcwd(char*buffer,size_t size)
会把当前的路径名copy到buffer中。
9
创建目录
int mkdir(char *dir,int mode)
实例分析
./file_creat creat//当前目录下没有creat文件,so建立并附属性。