文件编程----------write和复制操作
来源:互联网 发布:sql select as语句 编辑:程序博客网 时间:2024/06/05 15:22
1、Write(写)系统调用向打开的文件写数据,顾名思义往文件写东西,这里也是需要缓冲区,获取你要写的东西到缓冲区,再从缓冲区写入到文件当中;这里write往文件写数据是通过二进制的形式写的;
(1)、write()格式:
#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);
各参数及返回值的含义如下:
fd:要写入的文件的描述符。
buf:要写入的数据所存放的缓冲区。
count:要写入的字节数。
返回值:若成功返回已写的字节数,出错则返回-1并设置变量errno的值
(2)、使用write()时,可能遇到哪些情况?
返回值等于count
返回一个大于0小于count的值
阻塞
返回-1且errno的值为EINTR
返回-1且errno的值为EAGAIN
返回-1且errno的值为EBADF
返回-1且errno的值为EFAULT
返回-1且errno的值为EPIPE
返回的count是实际写入文件的字节数,其他的errno这些参数可以找man write(linux man手册),来看是什么错误,这里就不说了;
(3)、例子:
//这些头文件可以直接通过man来找;#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <string.h>#define SIZE 1024int main(){ int fd = open("abc", O_WRONLY|O_CREAT, 0777); if (fd == -1) { perror ("open"); return -1; } char buf[SIZE] = {0}; while (1) { fgets (buf, SIZE, stdin); //死循环中,fgets()此刻处于等待状态;需要你强制结束程序; if (strncmp ("end", buf, 3) == 0) break; ssize_t ret = write(fd, buf, strlen(buf)); //再一次执行这个程序时候会有覆盖(他会继续从头开始写入文件) if (ret == -1) { perror ("write"); } printf ("要写的字节数 :%d, 实际写的字节数: %d\n", SIZE, ret); } close(fd); return 0;}
2、文件的复制:
(1)、思想:复制就是read()和write()的两个过程,把1文件的内容读到缓冲区,在把缓冲区的内容写到2文件中;
文件1——>先读到——>buf
Buf——–>再写到——->文件2
(2)、例子
//把文件1 当中的ppt复制到文件2中
#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <string.h>#define SIZE 1024int main(){ //打开要读的文件 int fd1 = open("1.ppt", O_RDONLY); if (fd1 == -1) { perror ("open fd1"); return -1; } //打开要写进去的文件; int fd2 = open("2.ppt", O_RDONLY); if (fd2 == -1) { perror ("open fd2"); return -1; } int ret = 0; char buf[SIZE] = {0}; //读到缓冲区,在从缓冲区写到fd2; while (ret = read(fd1,buf,SIZE)) { if(ret == -1) { perror("read"); break; } write(fd2,buf,ret);//读到ret 个字节,所以不用担心会读到前一次buf中的内容 } printf("文件复制完成\n"); close(fd1); close(fd2); return 0;}
阅读全文
0 0
- 文件编程----------write和复制操作
- linux编程学习6-文件操作之用open、read、write实现文件复制拷贝功能
- 文件I/O-003.read和write复制文件
- Linux下read和write函数复制一个文件
- Linux基础编程-文件操作open,lseek,read,write,close
- Linux基础编程-文件操作open,lseek,read,write,close
- Linux基础编程-文件操作open,lseek,read,write,close
- IO编程——文件复制操作
- IO编程——文件复制操作
- 文件操作编程之复制移动删除
- write 操作文件注意事项
- 文件编程中的两套操作:标准C库(fread, fwrite,fclose,fopen...)和 系统调用(open, read, write...)
- Python 文件/文件夹操作(读写read/write、复制copy、删除delete、重命名rename)
- Python 文件/文件夹操作(读写read/write、复制copy、删除delete、重命名rename)
- 文件I/O-004.read和write复制文件 I O效率
- 编程实现文件复制和重命名
- 利用read/write系统调用复制文件
- Java-文件操作|read|write
- requestAnimationFrame--用法及轮播动画
- NYOJ-0002-括号匹配
- CodeForces
- [POJ
- centos使用nginx搭建https服务器
- 文件编程----------write和复制操作
- 剑指offer——12.数值的整数次方
- redis集群环境搭建
- 招聘销售经理
- java后台常用正则表达式
- CentOS 下安装和使用 Docker
- ios-多线程基础
- Android如何获取fragment里的webview控件资源
- IO流——Properties类的应用