访问文件之系统调用以及库函数访问

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建立并附属性。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值