(一)open系统的调用

为了创建一个新的文件描述,需要使用系统调用open

#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
int open(const char* path,int oflags);
int open(const char* path,int oflags,mode_t mode);//mode_t对文件的权限
  • 如果调用成功,则返回非负整数,否则返回-1
  • path:准备打开的文件设备名字
  • oflags:通过必需文件访问模式与可选模式相结合的方式来指定
    1.必需指定的访问模式之一:O_RDONLY(打开只读),O_WDONLY(只写),O_RDWR(读写)
    2.可选模式:O_APPEND(追加),O_TRUNC(若果文件存在,则删除,然后新建一个空的),O_CREAT(如果文件将会新建),O_EXCL

(二)close系统调用

#include<unistd.h>
int close(int fildes);
  1. 可以使用close系统调用终止文件描述符fildes
  2. 若调用成功,返回0,失败返回-1

例子

  #include <stdio.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int main(){int fd;char *name="open.txt";if(fd=open(name,O_CREAT|O_RDONLY,0644)<0)perror("open: ");elseprintf("Open file success\n");if(close(fd)<0)perror("close: ");elseprintf("Closed file success\n");}

Ubuntu系统操作步骤:

  1. vim open.c //创建文件
  2. 点击i,进入插入模式
  3. 输入代码
  4. 点击esc键,输入:,在输入wq
  5. gcc open.c//编译
  6. ./a.out//运行

(三)read系统调用

  • read系统调用:与文件描述符filds相关联的文件里读入nbytes个字节数据,并把它们放入buff中。他返回实际读入的字节数,若返回0,就表示未读入任何数据;返回-1,就表示发生错误
  • read系统调用的原型:
 #include<unistd.h>size_t read(int filds,void *buf,size_t nbytes);

(三)write系统调用

  • write系统调用:把缓冲区buf前的nbytes个字节写入与文件描述符filds关联的文件中。他返回实际写入的字节数。若返回0,就表示未写入任何数据;返回-1,表示发生了错误
  • 原型:
 #include<unistd.h>size_t write(int filds,const void *buf,size_t nbytes)

例子

#include <stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
int main()
{int fd,size;char s[]="hello",buffer[80]={0};fd=open("1.txt",O_WRONLY|O_CREAT,0644);write(fd,s,sizeof(s));close(fd);fd=open("1.txt",O_RDONLY);read(fd,buffer,sizeof(buffer));close(fd);printf("buffer = %s\n",buffer);
}

(四)文件读写位置控制

#include<unistd.h>
#include<sys/types.h>
off_t lseek(int fildes,off_t offset,int whence);

lseek系统调用对文件描述符filds的读写指针进行设置,可以用它设置文件下一个读写位置(可以跳跃读写)

  • offset指定位置,正数向后移,负数向前移
  • whence:
    • SEEK_SET:开始出
    • SEEK_CUR:当前位置
    • SEEK_END:末尾
  • 失败返回-1,成功返回从文件头到文件指针被设置处的字节偏移值

例子

#include <stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
int main()
{int fd,size;char s[]="hello,word!",buffer[80]={0};fd=open("1.txt",O_RDWR|O_CREAT,0644);write(fd,s,sizeof(s));//写完指针到达文件末尾memset(buffer,0,sizeof(buffer));//清空bufferread(fd,buffer,sizeof(buffer));//read只能向后读,而此时指针在文件末尾,所以为空printf("1.buffer = %s\n",buffer);lseek(fd,-12,SEEK_CUR);//从当前位置向前跳跃12个位置(还有一个\0,所以11+1),到达文件头memset(buffer,0,sizeof(buffer));read(fd,buffer,sizeof(buffer));printf("2.buffer = %s\n",buffer);
lseek(fd,0,SEEK_SET);memset(buffer,0,sizeof(buffer));read(fd,buffer,3);//读3个hel,文件指针也在此处printf("3.buffer = %s\n",buffer);
memset(buffer,0,sizeof(buffer));read(fd,buffer,sizeof(buffer));//从4个开始printf("4.buffer = %s\n",buffer);lseek(fd,-7,SEEK_END);memset(buffer,0,sizeof(buffer));read(fd,buffer,sizeof(buffer));printf("5.buffer = %s\n",buffer);}

linux操作系统读写文件操作(c语言)相关推荐

  1. python怎么读取文件-python怎么读写文件操作

    本节内容:I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input/ ...

  2. python怎么读写文件-python怎么读写文件操作

    本节内容:I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input/ ...

  3. linux下怎么批量命名文件,linux下的文件操作——批量重命名

    概述:在日常工作中,我们经常需要对一批文件进行重命名操作,例如将所有的jpg文件改成bnp,将名字中的1改成one,等等.文本主要为你讲解如何实现这些操作 1.删除所有的 .bak 后缀: renam ...

  4. 簇是操作系统读写文件的基本单位

    微软操作系统(DOS.WINDOWS等)中磁盘文件存储管理的最小单位叫做"簇" 数据存储在硬盘的时候都是以簇为单位,所以无论文件大小是多少,除非正好是簇大小的倍数,否则文件所占用的 ...

  5. C# IO流读写文件操作

    C# IO流读写文件操作 1.创建文件流 2.创建文件读写器 3.执行读写操作 4.关闭文件读写器和文件流 1.创建文件流 string filePath = AppDomain.CurrentDom ...

  6. C++在linux上读写文件

    文章目录 一.简介 1.1 文件类型 1.2 C++中操作文件的三大类 二.linux中写文件 2.1 步骤 2.2 文件打开方式 2.3 linux中写文件DEMO 三.linux中读文件 3.1 ...

  7. [C++调试笔记]执行声明的读写文件操作

    FILE* fp_init, * fp_aver, * fp_flux_aver, * fp_ener_flux_aver, * fp_dura; FILE* fp_who[SHOWNUMB]; // ...

  8. Linux下对文件操作时出现乱码怎么办?

    Linux下对文件操作经常会遇见乱码问题,我在网上搜了一些解决方法,希望能对大家有所帮助. 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中 ...

  9. Linux操作系统:文件和目录命令

    dba基础课程-Linux操作系统:文件和目录命令 cd /home 进入 '/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~us ...

最新文章

  1. vs2017运行显示系统找不到指定的文件_windows 平台使用 VS2017 编译 libevent 源码
  2. 类属性、类方法;私有属性、公有属性;私有方法、公有方法;静态属性、静态方法;python的命名规范__xx__\__xx\_xx(自用笔记)
  3. Android spinner取Value和Text的值
  4. Windows + Eclipse + Gtk 环境(总结)
  5. Use BAdI to link appointment to a given opportunity during creation
  6. 栈空间_Linux中的进程栈和线程栈
  7. 苹果一键越狱工具_最新苹果越狱工具现世,可越狱所有iOS版本!
  8. SHA256 的C语言实现
  9. python依赖注入_如何做依赖注入python方式?
  10. CodeIgniter辅助函数
  11. Andrew Ng机器学习课程17(1)
  12. 双击获取GridView控件行信息
  13. ASP.NET3.5下的MSChart图表控件使用
  14. python百度关键词相关搜索采集,链轮查询采集相关关键词工具exe
  15. 2019西安交通大学计算机复试,西安交通大学2019考研复试分数线多少分 各科基本分数线一览...
  16. Codeforces - Robot Rapping Results Report
  17. 动态规划之流水作业调度问题
  18. pmu2008终端服务器,PMU升级指导.doc
  19. ubuntu vim的 保存退出方法
  20. SecureCRT的设置

热门文章

  1. 子组件调用父组件中方法的方法
  2. Linux CentOS删除或重命名文件夹和文件的办法
  3. 使用联想计算节点的方法整理
  4. 平安科技寿险金服面试
  5. Web全栈~31.并发
  6. python中map函数返回值类型_Python学习第42课-map()函数
  7. 3D打印机故障问题与解决总集
  8. C语言 正序分解整数
  9. 思科640-816最新认证资料-Pass4side权威考题大师提供
  10. S9013驱动直流电机原理图