Linux系统编程:文件IO

操作系统为了方便用户使用系统功能而对外提供的一组系统函数。称之为 系统调用  其中有个  文件IO, 一般都是对设备文件操作,当然也可以对普通文件进行操作。一个基于Linux内核的没有缓存的IO机制,文件IO没有缓冲区。

1.文件IO的特性

(1)没有缓存区

(2)操作对象不在是流,而是文件描述符

(3)文件描述符:很小的非负的整数    int   0-1023,内核每打开一个文件就会获得一个文件    描述符

每个程序在启动的时候操作系统默认为其打开
          三个描述符与流对象匹配:
          0 ==>STDIN_FILENO === stdin
          1 ==>STDOUT_FILENO == stdout
          2 ==>STDERR_FILENO == stderr
          stdin,stdout,stderr,===>FILE*
          ansi c 
          unistd.h ===>POSIX 标准库

2.标准IO和文件IO的后缀

w == O_WRONLY | O_CREAT | O_TRUNC 
w+ == O_RDWR | O_CREAT | O_TRUNC 
r == O_RDONLY 
r+ == O_RDWR
a == O_WRONLY | O_CREAT | O_APPEND
a+ == O_RDWR|O_CREAT|O_APPEND

3.文件IO的操作流程

(1)打开:open
(2)读写:read / write 
(3)关闭:close 

4.函数

(1)open函数

头文件:#include <sys/types.h>

一般形式:open("文件名", O_WRONLY | O_CREAT |O_TRUNC,  0666);

如果有O_CREAT,则需要写权限,一般文件权限给0666(八进制)

返回值是一个文件描述符

(2)write函数

头文件:#include <unistd.h>

一般形式:int fd = open(.......);

                char buf[128] = "hello";

                write(fd, buf, strlen / sizeof(buf));

如果是字符型数组,用stelen,写入有效字符,如果用sizeof,会把128个字节全部写入,除有效字符外全为空字符

返回值是实际写入的个数

(3)read函数

头文件:#include <unistd.h>

一般形式:int fd = open(........);

                char buf[128] = "hello";

                read(fd, buf, sizeof(buf));

read函数只会读出能读到的位置,不会跟write函数一样

返回值是实际读到的字节数

(4)lseek函数

头文件:#include <sys/types.h>              #include <unistd.h>

一般形式:lseek(fd, 偏移个数,SEEK_SET)

类似于fleek函数,返回值是off_t,是长整型,打印的时候用%ld,偏移后写入默认是覆盖写

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值