linux操作系统读写文件操作(c语言)
(一)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);
- 可以使用close系统调用终止文件描述符fildes
- 若调用成功,返回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: ");
else
printf("Open file success\n");
if(close(fd)<0)
perror("close: ");
else
printf("Closed file success\n");
}
Ubuntu系统操作步骤:
- vim open.c //创建文件
- 点击i,进入插入模式
- 输入代码
- 点击esc键,输入:,在输入wq
- gcc open.c//编译
- ./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));//清空buffer
read(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语言)的更多相关文章
- 3)Linux程序设计入门--文件操作
)Linux程序设计入门--文件操作 Linux下文件的操作 前言: 我们在这一节将要讨论linux下文件操作的各个函数. 文件的创建和读写 文件的各个属性 目录文件的操作 管道文件 .文件的创建和读 ...
- Linux系统编程@文件操作(一)
只总结了部分常用的内容,详细内容参考<UNIX环境高级编程>及相关书籍. Linux中文件编程可以使用两种方法 Linux系统调用(依赖于系统) C语言库函数(不依赖于系统) Linux系 ...
- Linux C 程序 文件操作(Linux系统编程)(14)
文件操作(Linux系统编程) 创建一个目录时,系统会自动创建两个目录.和.. C语言实现权限控制函数 #include<stdio.h> #include<stdlib.h> ...
- c++中读写文件操作
读写文件这个,不常用,每次用的时候都会百度一下,每次写法还都不一样,所有总是记混.今天利用点时间总结下之前工程中用过的.以后就安照这种方法写了. 搞acmicpc的时候喜欢用freopen(),这个是 ...
- linux编程之文件操作
在linux下用文件描述符来表示设备文件盒普通文件,文件描述符是一个整型的数据,所有对文件的操作都是通过文件描述符来实现的. 文件描述符是文件系统中连接用户空间和内核空间的枢纽,当我们打开一个或者创建 ...
- Linux驱动 读写文件【转】
转自:http://blog.csdn.net/h_armony/article/details/7546624 在VFS的支持下,用户态进程读写任何类型的文件系统都可以使用read和write着两个 ...
- linux下的文件操作——批量重命名
概述:在日常工作中,我们经常需要对一批文件进行重命名操作,例如将所有的jpg文件改成bnp,将名字中的1改成one,等等.文本主要为你讲解如何实现这些操作 1.删除所有的 .bak 后缀: renam ...
- node.js的fs核心模块读写文件操作 -----由浅入深
node.js 里fs模块 常用的功能 实现文件的读写 目录的操作 - 同步和异步共存 ,有异步不用同步 - fs.readFile 都不能读取比运行内存大的文件,如果文件偏大也不会使用readFil ...
- Xshell6远程访问linux及Xftp6远程针对linux系统中文件操作(附图文详解)
1.首先我们需要先做好前期准备工作,需要到XManager6官网上将Xshell及Xftp下载并安装,安装过程一直下一步就好了.这里是其官网:http://www.xshellcn.com/.安装完成 ...
- Linux 目录和文件操作
Linux常用命令--目录和文件操作 [目录]删除.复制.移动 : 1.删除文件夹用:rmdir 文件夹名 但是rmdir不能删除非空的文件夹,那如何删除非空文件夹呢: 2.通常情况下,删除文件用:r ...
随机推荐
- 【环境搭建】多版本的jdk共存
问题来源 burpsuite 2021需要使用Java 9及以上版本,而其他工具需要Java 8,因此需要两个版本共存,并且做到除了burpsuite以外的工具默认使用Java 8打开. 需要的软件 ...
- 如何使用C#中的Lambda表达式操作Redis Hash结构,简化缓存中对象属性的读写操作
Redis是一个开源的.高性能的.基于内存的键值数据库,它支持多种数据结构,如字符串.列表.集合.散列.有序集合等.其中,Redis的散列(Hash)结构是一个常用的结构,今天跟大家分享一个我的日常操 ...
- docker部署zabbix 6.0高可用集群实验
0 实验环境 虚拟机,postgresql本地部署,zabbix server及nginx容器部署 1 postgresql 参看前作 <postgresql + timescaledb离线安装 ...
- python: linux使用多版本python
安装python3.6 $ sudo add-apt-repository ppa:deadsnakes/ppa $ sudo apt update $ sudo apt install python ...
- failed (2: No such file or directory) in /var/www/QQ_Music/nginx.conf:18
错误原因 解决方案 引入文件 /www/server/nginx/conf/mime.types;
- BurpSuite设置上游代理访问内网
转载原文 原理知道了后,开始! 拿到B的shell后,添加路由 拿到B的shell后,开启sock4 在D主机上设置好 最后成功抓到包
- Golang之旅——内存管理
转载放在最前 一文带你了解,虚拟内存.内存分页.分段.段页式内存管理[Golang三关-典藏版]一站式Golang内存洗髓经 | Go 技术论坛 刘丹冰Aceld感谢以上文章作者,收获满满 存储器管理 ...
- 【pandas小技巧】--日期相关处理
日期处理相关内容之前pandas基础系列中有一篇专门介绍过,本篇补充两个常用的技巧. 1. 多列合并为日期 当收集来的数据中,年月日等信息分散在多个列时,往往需要先合并成日期类型,然后才能做分析处理. ...
- SpringMVC配置web.xml文件详解(列举常用的配置)
常用的web.xml的配置 1.Spring 框架解决字符串编码问题:过滤器 CharacterEncodingFilter(filter-name) 2.在web.xml配置监听器ContextLo ...
- MAUI+Blazor混合应用开发示例
前言 笔者之前在公司搭建过一套生产管理系统,该系统要求能和硬件进行串口通信,同时又要提供后台信息查询.笔者给出的解决方案就是:MAUI + Blazor,这样只需要提供一套UI,就能满足桌面端.移动端 ...