linux基础操作1 基本函数-开 关 读 写 建

2023-05-16

系统编程 -文件io访问基本操作

:所有的 I/O 操作都是通过读文件或者写文件来完成的!(文件:在这里,把所有的外围设备,包括键盘和显示器,都看成是文件系统中的文件)

“Linux 中一切皆文件":传统的操作系统来说,普通的 I/O 操作一般会被内核缓存,这种 I/O 被称作缓存I/O。现在所提到的文件访问机制不经过操作系统内核的缓存,数据直接在磁盘和应用程序地址空间进行传输,故该文件访问的机制称作为直接 I/O 。

        直接 I/O 是一种非常高效的手段。

    linux系统系统操作的开关读写建的系统库包含:(可以使用man 2 open/creat/write等查看需要包含的文件库)

    #include <unistd.h>  //close read
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>

1.开 open函数 open 的两个原型

int open(const char *path, int oflags,mode_t mode);
//第一个参数 path 表示:路径名或者文件名。路径名为绝对路径名,例如开发板中的 led驱动的设备几点/dev/leds。
//第二个参数 oflags 表示:打开文件所采取的动作。
//第三个参数 mode 表示:设置创建文件的权限

int open(const char *path, int oflags);
//返回一个文件句柄,文件句柄是文件的唯一识别符 ID
//两个参数的 open 函数主要用于创建文件的路径和文件采取的动作

================

 

2 关close 

任何一个文件在操作完成之后都需要关闭,这个时候需要调用 close 函数!

        int close(int fd);
//参数 fd,使用 open 函数打开文件之后返回的句柄。

//返回值,一般很少使用 close 的返回值。

3.读 read

对文件进行写操作,read 函数使用的比较多( 可先学习如何写 在作读操作 更容易理解 )

函数原型为: ssize_t read(int fd,void *buf,size_t len)
//参数 fd,使用 open 函数打开文件之后返回的句柄。
//参数*buf,读出的数据保存的位置。
//参数 len,每次最多读 len 个字节。

//返回值为 ssize 类型,出错会返回-1,其它数值表示实际写入的字节数,返回值大于 0 小于 len 的数值都是正常的。

    #include <unistd.h>  //close read
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
	
	#include <stdio.h>
	#include <string.h>
	
	#define MAX_LEN 1000
	
	main()
	{
		int fd;
		ssize_t ret,len_w,len_r=MAX_LEN;
		char *testwrite = "/bin/testwrite";
		char readbuffer[]="hello_read_exampler!";
		char writebuffer[MAX_LEN];
		
		if((fd=open(testwrite,O_RDWR | O_CREAT ,0777))<0)
		{
			printf("open %s err!\r\n",testwrite);			//1
		}else printf("open %s ok!\r\n",testwrite);	
		if((len_w=write(fd,readbuffer,strlen(readbuffer)))<0)
		{
			printf("write err \r\n");			
		}else printf("write ok! \r\n");                                //2
		close(fd);//--------关闭后重新读---------------
		
		if((fd=open(testwrite,O_RDWR | O_CREAT,0777))<0)
		{
			printf("open %s err!\r\n",testwrite);	
		}else printf("open %s ok!\r\n",testwrite);	                //3
		if((ret=read(fd,readbuffer,len_r))<0)
		{
			printf("read err \r\n");
		}else printf("read OK ! \r\n");                                //4
		close(fd);//--------关闭---------------------
	}


4 写 write

对文件进行写操作,write 函数使用的比较多

`函数原型为 ssize_t write(int fd,const void *buf,size_t count)
//参数 fd,使用 open 函数打开文件之后返回的句柄。
//参数*buf,需要写入的数据。
//参数 count,将参数*buf 中最多 count 个字节写入文件中。

//返回值为 ssize 类型,出错会返回-1,其它数值表示实际写入的字节数。

编写简单的 write.c 文件测试 write 函数================

   

5.建立 creat

关于 creat 函数,首先这个单词并不是表示创建的意思,创建的英文单词是“create”,这是早期的一个小的拼写错误,却一直沿用下来。
在介绍 open 函数的时候,可以看到 open 函数有两种形式,一个是两个参数一个是三个参数,早期的时候 open 只有三个参数的形式,三个参数的形式会导致 open 函数无法打开一个未创建的文件,也就是无法建立文件,所以就有了这个 creat 函数。
现在 creat 函数可以完全用 open 替代,考虑到在阅读代码的时候可能会碰到,所以简单介绍一下。
creat 函数原型如下。int creat(const char * pathname, mode_t mode);//creat 只有两个参数,参数含义和 open 类似。

大家看到这个函数的时候知道它是创建文件的就行,在写代码的时候完全可以用 open 代替

编写简单的 creat.c 文件测试 creat 函数。

   


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux基础操作1 基本函数-开 关 读 写 建 的相关文章

  • curl库函数 说明

    目录索引 xff1a 一 LibCurl基本编程框架 libcurl是一个跨平台的网络协议库 xff0c 支持http https ftp gopher telnet dict file 和ldap 协议 libcurl同样支持HTTPS证
  • 10大经典排序算法-已经亲自验证

    10大经典排序 参考书籍 王道 数据结构第8章节 算法代码在Visio Stdio 2019验证过 xff01 根据操作方式可分5类 xff1a 插入排序 xff0c 交换排序 xff0c 选择排序 xff0c 归并和基数排序 其中 xff
  • 线性表--顺序表、单链表、双链表 总结

    线性表 顺序表 单链表 双链表 基础操作总结 函数 xff1a 王道 数据结构 已在Visio Stdio 2019验证成功 xff01 顺序表插入 删除 查找 单链表的头插法 尾插法 xff0c 按值 按序查找 xff0c 插入 删除 双
  • 串的模式识别和kmp算法

    串的简单模式匹配 与 KMP 获取next数组 参考书籍 王道 数据结构 代码验证软件 xff1a vs2019 include lt iostream gt typedef char SString 暴力比对 S abcabaaabaab
  • 二叉树和二叉排序树的操作

    二叉树和二叉排序树的操作 参考书籍 王道 书籍结构 代码已在vs2019验证过 1 二叉树的遍历 二叉树的建树 xff08 层次建树 xff09 xff0c 前序 中序 后序遍历 中序非递归遍历 层次遍历 include lt iostre
  • 图的遍历和相关操作

    图的遍历和相关操作 参考书籍 xff1a 王道 数据结构 代码在vs2019验证过 xff01 图的创建 xff0c 打印 xff0c 广度优先遍历 xff0c 深度优先遍历 测试代码 xff1a include lt stdio h gt
  • GDB调试 小结

    本文介绍使用GDB进行C调试 参考 xff1a 用gdb调试程序笔记 以段错误 Segmental fault 为例 GDB操作基本命令 1 编写调试测试代码如下 bugging c 1到100的求和函数 xff0c 代码调试 buggin
  • 嵌入式 2-笔试--c/c++ (重复的题目就是高频考查题)

    转自 xff1a https blog csdn net cxyzyywoaini article details 87879788 第一套 重复的题目越重要 xff01 预处理器 xff08 Preprocessor xff09 1 用预
  • 嵌入式 3-笔试-linux/c/c++(重复的题目就是高频考查题) 8个大厂精选收集50题

    Linux开发相关的大厂面试题 xff0c 主要是Linux服务器开发相关 xff0c 此处仅作优秀试题摘录 xff0c 详细文档 xff0c 可自行到文档csdn下载区下载 xff0c 同时 xff0c 如涉及侵权内容 请及时告知 xff
  • 关于Runnable 和 Thread的应用场景

    摘自StackOverflow 个人觉得比较靠谱的答案 xff0c 细节请看url http stackoverflow com questions 541487 implements runnable vs extends thread
  • RT-Thread嵌入式操作系统 开发笔记(上)

    更详细的参考链接 0 准备 xff1a 环境准备 xff1a MDK ARM 5 30 正式版或评估版 xff0c 5 14 版本及以上版本均可 43 破解软件 STM32F103 pack 库文件 百度云盘云盘文件 1 文件 xff0c
  • RT-Thread嵌入式操作系统 开发笔记(中)

    9 生产者消费者问题模型 xff08 验证代码producer consumer c xff09 生产者消费者问题是 一个经典的 多线程同步问题 有两个线程 一个生产者线程和一个消费者线程 两个线程共享二个初始为空 固定大小为n的缓存区 生
  • 嵌入式软件基础问题-转

    volatile关键字的作用 直译为 易变 xff0c 与const相反 用volatile定义的变量 xff0c 在每一次被访问时都是从内存中读取该量的值 xff0c volatile不允许编译器优化该值到寄存器 xff0c 所以取值时不
  • 嵌入式操作系统RT-Thread和Freertos资源对比总结 转

    Freertos是一个国外推出的一个迷你的实时操作系统内核 xff0c 开源 xff0c 功能包括 xff1a 任务管理 时间管理 信号量 消息队列 内存管理 记录功能 软件定时器 协程等 xff0c 可基本满足较小系统的需要 RT Thr
  • 虚拟机更改IP 连接失败 问题解决Destination Host Unreachable

    问题1 xff1a 虚拟机原来是ens33的ip 1 100 xff0c 可以联网 xff0c 改为3 66就无法联网 xff0c 再改回1 100 xff0c 依然无法联网 如图 解决方法 xff1a 重启网卡管理器即可 xff1a se
  • NUC980 jtag0 默认管脚复用问题

    NUC980DK61YC 使用G13 xff08 管脚编号是205 xff09 用作普通io口 xff0c 出现报错 报错 xff1a echo 205 gt sys class gpio export Please Check GPIOG
  • usb的device模式hid配置错误点

    将usb做从机 xff0c hid通信操作 xff08 模拟串口 xff0c 模拟u盘 xff0c hid通信 xff09 内核设定 1 模拟u盘 2 模拟串口 3 hid通信 1 报错 xff1a insmod libcomposite
  • nuc980 串口问题 串口断帧 丢帧问题

    NUC980 的性能不错 xff0c 串口速率号称达到3Mbps xff08 代码级有4M的极限 xff09 xff0c 并且带有流控性能 xff1b 经过单独测试3Mbps下有千分之三的丢包率 xff08 NUC980和电脑的串口助手交互
  • 2021-09-14 uboot移植开发

    引言 xff1a 最近要改动uboot xff0c 实现像微软PC上 xff0c u盘一键刷机或手机上安全模式下刷机的操作 专门去好好研究了点uboot的启动过程 xff1b 以下为总结 xff1a 嵌入式系统 微软 PC bootload
  • JAVA 泛型中的<T> 和 <?> 的应用场景

    在JAVA 泛型中 xff0c 经常看到 lt gt 应用场景为当不确定类型时 因为泛型的输入参数是类型 xff0c 而有一些状况下我们并不能确定类型

随机推荐