Linxu系统IO函数 read和write lseek

read 和 write 函数   
复制代码
 1 /*
 2     #include <unistd.h>
 3     ssize_t read(int fd, void* buf, size_t count);
 4         参数:
 5             - fd:文件描述符,open得到的,通过这个文件描述符操作某个文件
 6             - buf:读取数据存放的地方,数组的地址(传出参数:数据保存在数组中,通过数组得到数据)
 7             - count:指定的数组的大小(最大范围,超过buf大小,数据截断)
 8         返回值:
 9             - 成功:
10                 >0:返回实际的读取到的字节数
11                 =0:文件已经读取完了
12             - 失败:返回-1 并且设置 errno
13     #include <unistd.h>
14     ssize_t write(int fd, const void* buf, size_t count);
15         参数:
16             - fd:文件描述符,open得到的,通过这个文件描述符操作某个文件
17             - buf:要往磁盘写入的数据,数组
18             - count:要写的数据的实际的大小
19         返回值:
20             - 成功:实际写入的字节数
21             - 失败:返回-1 并且设置 errno
22 */
23 #include <unistd.h>
24 #include <stdio.h>
25 #include <sys/types.h>  //open
26 #include <sys/stat.h>   //open
27 #include <fcntl.h>      //open
28 int main()
29 {
30     //1.通过open打开 english.txt 文件    
31     int srcfd = open("english.txt",O_RDONLY);
32     if(srcfd == -1)
33     {
34         perror("open");
35         return -1;
36     }
37     //2.创建一个新的文件(拷贝文件)
38     int destfd = open("cpy.txt",O_WRONLY|O_CREAT,0664);//destfd:目标文件的标识符
39     //0:普通文件 所有者可以 读写  群组可以 读写  其他只能 读取
40     //所有者(Owner)、群组(Group)和其他人(Others)
41     //每个用户组都有读取(Read)、写入(Write)和执行(Execute)文件的权限。
42     if(destfd == -1)
43     {
44         perror("open");
45         return -1;
46     }
47     //3.频繁的读写操作 
48     char buf[1024] = {0};//创建buf数组大小 1024  并初始化为0
49     int len = 0;//len = 返回具体字节的个数
50     while((len = read(srcfd,buf,sizeof(buf))) > 0)
51     {
52         write(destfd, buf, len);
53     }
54     //4.关闭文件
55     close(destfd);
56     close(srcfd);
57     return 0;
58 }
复制代码

lseek

复制代码
 1 /*
 2     标准C库的函数用    linux终端中:  man 3 fseek 查询
 3     #include <stdio.h>
 4     int fseek(FILE* stream, long offset, int whence);
 5 
 6     Linux系统函数   man 2 lseek
 7     #include <sys/type.h>
 8     #include <unistd.h>  //unix的标准头文件
 9     off_t lseek(int fd, off_t offset, int whence);
10         参数:
11             - fd: open 得到的 文件描述符 通过fd操作某个文件
12             - offset: 偏移量
13             - whence: 
14                 SEEK_SET:设置文件指针的偏移量
15                 SEEK_CUR:设置偏移量,当前位置 + 第二个参数 offset 的值
16                 SEEK_END:设置偏移量,文件大小 + 第二个参数 offset 的值
17         返回值:返回文件指针的位置
18     作用:
19         1.移动文件指针到文件头
20         lseek(fd, 0, SEEK_SET);
21         2.获取当前文件指针的位置
22         lseek(fd, 0, SEEK_CUR);
23         3.获取文件长度
24         lseek(fd, 0, SEEK_END);
25         4.拓展文件长度,例:当前文件10B --> 110B,增加100字节
26                             lseek(fd,100,SEEK_END);
27         下载文件时候  防止内存不够 先创建拓展足够量的空间 然后下载内容 
28 */
29 #include <sys/types.h>  //lseek  open
30 #include <sys/stat.h>   //open
31 #include <unistd.h>     //lseek
32 #include <fcntl.h>      //open
33 #include <stdio.h>      //perror
34 
35 int main()
36 {
37     int fd = open("hello.txt",O_RDWR);
38     if( fd == -1)
39     {
40         perror("open");
41         return -1;
42     }
43     //拓展文件的长度
44     int ret = lseek(fd,100,SEEK_END);
45     if(ret == -1)
46     {
47         perror("lseek");
48         return -1;
49     }
50     //写入一个空数据   拓展失败    11 + 100 + 1(原先11 拓展100 写入1 )
51     write(fd," ",1);
52     //关闭文件
53     close(fd);
54     return 0;
55 }
复制代码
112:11 + 100 + 1(原先11 拓展100 写入1)

 

posted on   廿陆  阅读(18)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示