当前位置: 首页 > news >正文

Linux环境下运行介绍

1. 文件编程函数介绍

如果在Linux系统下学习C语言,就会了解到两套文件编程接口函数:

C语言标准的文件编程函数: fopenfreadfwritefclose

Linux下提供的文件编程函数: openreadwriteclose

传参的区别:

基于文件指针: fopen fclose fread fwrite 比较适合操作普通文件。

基于文件描述符: open close read write 比较适合操作设备文件。

2. C语言标准库提供的文件编程函数

下面介绍C语言标准库提供的文件编程函数,一般对文件常用的操作就是:创建(打开)、读、写、关闭。

其他的函数用法同理,只要把这4个函数学会了,基本的文件操作已经可以完成了。

#include 
FILE *fopen(const char *path, const char *mode);
函数功能: 打开或者创建文件
函数参数:
const char *path  填文件的路径
const char *mode  填权限。比如: wb rb a+b 
函数返回值: 文件打开或者创建成功返回对应的文件指针.size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
函数功能: 读文件
函数参数:
void *ptr :读取数据存放的缓冲区。
size_t size :每次读取的大小
size_t nmemb :每次读取的次数
FILE *stream :读取文件
返回值: 读取成功的次数。
比如: fread(buff,1,1000,fp);   从fp文件里读取1000个字节的数据到buff里。size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
函数功能: 写文件
函数参数:
void *ptr :将要写入的数据缓冲区首地址。
size_t size :每次写入的大小
size_t nmemb :每次写入的次数
FILE *stream :写入的文件
返回值: 写入成功的次数。
比如: fwrite(buff,1,1000,fp);   向fp文件里写1000个字节的数据,数据从buff里获取。int fclose(FILE *fp);
函数功能: 关闭打开的文件。

3. Linux下的系统函数: 文件编程函数

Linux下也有一套系统函数,用于文件操作,这些函数在Linux下常用于读写设备文件;当然,读写普通文件也是一样,普通文件也是磁盘上的数据,也是操作块设备驱动。

#include 
#include 
#include int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
函数功能: 打开或者创建文件
函数参数:
const char *pathname  : 文件的路径
int flags :打开文件的权限. 比如: O_RDONLY  O_WRONLY  O_RDWR  O_CREAT
mode_t mode :创建文件时指定文件本身的权限.比如:S_IRWXU  00700 user (file owner) has read, write and execute permissionS_IRUSR  00400 user has read permissionS_IWUSR  00200 user has write permissionS_IXUSR  00100 user has execute permissionS_IRWXG  00070 group has read, write and execute permissionS_IRGRP  00040 group has read permissionS_IWGRP  00020 group has write permissionS_IXGRP  00010 group has execute permissionS_IRWXO  00007 others have read, write and execute permissionS_IROTH  00004 others have read permissionS_IWOTH  00002 others have write permissionS_IXOTH  00001 others have execute permission
返回值: (返回文件描述符--小整数)文件打开成功值>=0 否则<0
示例: open("123.c",O_RDWR|O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO);
创建一个123.c的新文件,并且指定该文件的权限是最高权限. chmod 777 123.c一样ssize_t read(int fd, void *buf, size_t count);
函数功能: 读文件
函数参数:
int fd  :文件描述符. ---表示已经打开的文件。
void *buf :读取数据存放的缓冲区.
size_t count :读取字节数量.
返回值: 成功读取的字节数量.ssize_t write(int fd, const void *buf, size_t count);
函数功能: 写文件
函数参数:
int fd  :文件描述符. ---表示已经打开的文件。
void *buf :将要写入到文件的数缓冲区首地址.
size_t count :写入的字节数量.
返回值: 成功写入的字节数量.int close(int fd);
函数功能: 关闭已经打开的文件.

4. 案例: 实现文件拷贝功能(fopen)

例如: cp 123.c 456.c 将123.c的数据拷贝到456.c文件里。

注意: 下面这个代码需要在命令行上运行,需要给main函数传参。如果是在windows下IED软件里运行,可以将传参代码屏蔽掉,改成让用户输入,或者直接把参数固定也可以。

#include 
//实现: cp 123.c 456.c
int main(int argc,char **argv)
{if(argc!=3){printf("参数: ./a.out <源文件> <目标文件>\n");return 0;}/*1. 打开源文件*/FILE *src_fp=fopen(argv[1],"rb");if(src_fp==NULL){printf("%s 文件打开失败.\n",argv[1]);return -1;}/*2. 创建新文件*/FILE *new_fp=fopen(argv[2],"wb");if(new_fp==NULL){printf("%s 文件创建失败.\n",argv[2]);fclose(src_fp);return -2;}/*3. 实现文件的拷贝*/unsigned char buff[1024];unsigned int cnt;while(1){cnt=fread(buff,1,1024,src_fp);fwrite(buff,1,cnt,new_fp);if(cnt!=1024)break;}/*4. 关闭文件*/fclose(new_fp);fclose(src_fp);return 0;
}

5. 案例: 实现文件拷贝功能(open)

例如: cp 123.c 456.c 将123.c的数据拷贝到456.c文件里。

#include 
#include 
#include 
#include //实现: cp 123.c 456.c
int main(int argc,char **argv)
{if(argc!=3){printf("参数: ./a.out <源文件> <目标文件>\n");return 0;}/*1. 打开源文件*/int fd_src=open(argv[1],O_RDONLY);if(fd_src<0){printf("源文件打开失败.\n");return -1;}/*2. 创建新文件*/int fd_new=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);if(fd_new<0){printf("新文件创建失败.\n");close(fd_src);return -2;}/*3. 拷贝文件*/unsigned char buff[1024];int cnt;while(1){cnt=read(fd_src,buff,1024);write(fd_new,buff,cnt);if(cnt!=1024)break;}/*4. 关闭文件*/close(fd_src);close(fd_new);return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 51单片机学习
  • 第八季完美童模全球总冠军·韩嘉潞 破浪扬帆写就传奇
  • INSTALLMENT MORTGAGE
  • Mac升级系统文件都丢了怎么办?Mac更新后资料找不到了怎么恢复
  • 【ARM 芯片 安全与攻击 6 -- ARM 中的 PAC 是什么?】
  • 2024年电赛H题全开源
  • 深度学习(YOLO、DETR) 十折交叉验证
  • 一个简单的Rtmp推流客户端(QT录音,OpenCV摄像,FFmpeg编码推流)
  • 模糊Smith智能控制方法的研究 及其单片机实现
  • 打造聊天流式回复效果:Spring Boot+WebSocket + JS实战
  • Python办公自动化:初识 `openpyxl`
  • Ubuntu离线安装库并解决依赖关系
  • 发信息(c语言)
  • golang提案,内置 Go 错误检查函数
  • 【前端】NodeJS:记账本案例优化(token)
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 5、React组件事件详解
  • chrome扩展demo1-小时钟
  • javascript 总结(常用工具类的封装)
  • nfs客户端进程变D,延伸linux的lock
  • PV统计优化设计
  • Python语法速览与机器学习开发环境搭建
  • React16时代,该用什么姿势写 React ?
  • Sass 快速入门教程
  • Sublime text 3 3103 注册码
  • TCP拥塞控制
  • vuex 笔记整理
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 不上全站https的网站你们就等着被恶心死吧
  • 工程优化暨babel升级小记
  • 关于Flux,Vuex,Redux的思考
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 嵌入式文件系统
  • 通过npm或yarn自动生成vue组件
  • 函数计算新功能-----支持C#函数
  • 如何正确理解,内页权重高于首页?
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #1014 : Trie树
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (+4)2.2UML建模图
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (6)设计一个TimeMap
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (js)循环条件满足时终止循环
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (算法二)滑动窗口
  • (算法设计与分析)第一章算法概述-习题
  • (一)、python程序--模拟电脑鼠走迷宫
  • (转) Face-Resources
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全