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 ...
随机推荐
- 快速上手 | Datavines 两表值比对规则用法
Datavines 是一站式开源数据可观测性平台,提供元数据管理.数据概览报告.数据质量管理,数据分布查询.数据趋势洞察等核心能力,致力于帮助用户全面地了解和掌管数据,让您做到心中有数. 场景 比较某 ...
- IIS 应用程序池 PowerShell 脚本更改高级属性的方法
## IIS WebAdmin Module Import-Module WebAdministration $AppPool = "mqttService(8011)" $Sit ...
- 【工具推荐】github打不开or加载慢?不用配置hosts,教你一键加速!
不说废话 下载watt toolkit(原名steam++) 官方地址: Watt Toolkit - 瓦特工具箱(Steam++官网) (steampp.net) 安装完后选中,点击一键加速即可. ...
- JFrame一些基础小知识
JFrame.setLocationRelativeTo方法 JFrame.setLocationRelativeTo()是一个Java Swing中的方法,它用于将窗口居中显示在屏幕上. 当你调用该 ...
- js中调用函数中的变量
(function f1() { var num = 10; window.num = num;})(); console.log(num);
- Builder 生成器模式简介与 C# 示例【创建型2】【设计模式来了_2】
〇.简介 1.什么是生成器模式? 一句话解释: 在构造一个复杂的对象(参数多且有可空类型)时,通过一个统一的构造链路,可选择的配置所需属性值,灵活实现可复用的构造过程. 生成器模式的重心,在于分离 ...
- 论文解读(APCA)《Adaptive prototype and consistency alignment for semi-supervised domain adaptation》
[ Wechat:Y466551 | 付费咨询,非诚勿扰 ] 论文信息 论文标题:Adaptive prototype and consistency alignment for semi-super ...
- 利用pytorch自定义CNN网络(三):构建CNN模型
本文是利用pytorch自定义CNN网络系列的第三篇,主要介绍如何构建一个CNN网络,关于本系列的全文见这里. 笔者的运行设备与软件:CPU (AMD Ryzen 5 4600U) + pytorch ...
- springboot项目图片不显示的问题
首先确认你的图片路径是对的,maven重新clean,install了,web服务也重启了 那么大概率就是浏览器缓存的原因,因为页面直接用的是缓存的旧数据,所以显示不出来. 在不修改浏览器设置的情况下 ...
- windows访问linux分区文件
正常情况下,linux可以访问windows系统的文件,而要想在windows下访问linux文件,需要借助第三方软件. 常用的有以下几款: 1.Linux Reader 2.Ext2 IFS 3.E ...