实验二 Linux文件编程

一、实验目的与任务

目的:了解掌握文件系统特点与功能,学会借助文件系统的功能函数进行编程。

任务:利用C语言指令编写程序调用文件系统函数,完成相应功能。

二、实验设备

装有Linux操作系统的计算机一台。

三、实验要求

1)利用文件系统的打开函数,读取,写入等函数对文件进行相应的操作,然后观察操作结果。

2)通过编程进行Linux文件属性的管理。

四、实验内容

1.在/home下使用open()函数打开一个名为"姓名.txt"的文件,权限为666,如果该文件不存在,则创建此文件,并向其中写入字符串"hello 学号,this is world",然后把写入的内容读取出来并在终端上显示输出。

复制代码
#include <stdio.h>
复制代码
#include <stdlib.h>
复制代码
#include <unistd.h>
复制代码
#include <fcntl.h>
复制代码
#include <string.h>
复制代码
复制代码
int main()
复制代码
{
复制代码
 int fd=0;
复制代码
 char buf[50]="hello 542113430819,this is world\n";
复制代码
 char filename[30]="/home/wangyonghao.txt";
复制代码
复制代码
fd=open(filename,O_CREAT|O_RDWR,666);
复制代码
if(fd==-1)
复制代码
{
复制代码
printf("open error\n");
复制代码
return -1;
复制代码
}
复制代码
write(fd,buf,sizeof(buf));
复制代码
close(fd);
复制代码
复制代码
//直接读出
复制代码
复制代码
fd=open(filename,O_RDONLY);
复制代码
if(fd==-1)
复制代码
{
复制代码
perror("file open error.\n");
复制代码
return -1;
复制代码
}
复制代码
off_t f_size=0;
复制代码
f_size=lseek(fd,0,SEEK_END) ; //获取文件长度 
复制代码
lseek(fd,0,SEEK_SET);
复制代码
while(lseek(fd,0,SEEK_CUR)!=f_size)
复制代码
{
复制代码
        read(fd,buf,sizeof(buf));
复制代码
        printf("%s\n",buf);
复制代码
}
复制代码
close(fd);
复制代码
return 0;
复制代码
}  

        2.在/home下使用open()函数打开一个名为"学号.txt"的文件,如果该文件不存在,则创建此文件,通过使用read函数和write函数把"姓名.txt"的内容复制到"学号.txt"文件中。
复制代码
复制代码
#include<sys/types.h>
复制代码
#include<sys/stat.h>
复制代码
#include <stdio.h>
复制代码
#include <unistd.h>
复制代码
#include <fcntl.h>
复制代码
#include <string.h>
复制代码
复制代码
int main()
复制代码
{
复制代码
 int fd=0;
复制代码
 int fd1=0;
复制代码
 char filename[40]="/home/wangyonghao.txt";
复制代码
 char filename1[40]="/home/542113430819.txt";
复制代码
//data
复制代码
char buf[50]={0};
复制代码
复制代码
 fd=open(filename,O_CREAT|O_RDWR);
复制代码
 if(fd==-1)
复制代码
{
复制代码
printf("open error\n");
复制代码
return -1;
复制代码
}
复制代码
off_t f_size=0;
复制代码
f_size=lseek(fd,0,SEEK_END);
复制代码
lseek(fd,0,SEEK_SET);
复制代码
while(lseek(fd,0,SEEK_CUR)!=f_size)
复制代码
{
复制代码
 read(fd,buf,sizeof(buf));
复制代码
}
复制代码
 printf("%s\n",buf);
复制代码
复制代码
 
复制代码
fd1=open(filename1,O_CREAT|O_RDWR);
复制代码
if(fd1==-1)
复制代码
{
复制代码
printf("open error\n");
复制代码
return -1;
复制代码
}
复制代码
write(fd1,buf,sizeof(buf));
复制代码
复制代码
close(fd);
复制代码
close(fd1);
复制代码
return 0;
复制代码
}  
  
        3.获取"姓名.txt"文件的文件类型、用户id、文件长度、最后访问时间和最后修改时间。
复制代码
其中,第二行显示了文件名和文件类型;第三行显示了文件大小和块数;第五行显示了文件的权限、属主和属组;第七行显示了文件的最后访问时间;第八行显示了文件的最后修改时间;第九行显示了文件的状态改变时间。2

五、分析总结

通过这次实验,我了解并掌握了文件系统特点与功能,学会如何借助文件系统的功能函数用C语言指令编写程序调用文件系统函数进行编程来完成相应功能。掌握了Linux下文件操作函数的使用方法,能够更加灵活地对文件进行读写操作。利用文件系统的打开函数,读取,写入等函数对文件进行相应的操作,然后观察操作结果。在Linux环境下创建新文件或者打开已有文件,有不同的打开模式(如只读、只写、读写等)。

实验中我深刻体会到了文件权限管理的重要性,文件权限对文件访问的限制作用。合理地设置文件的权限是保护文件安全的重要手段。在实验中,我发现对于文件操作函数返回值的错误处理非常重要,能够避免因为文件操作失败而导致系统异常。

总的来说,通过实验我深入学习了Linux文件编程的相关知识,更加熟练地掌握了文件的创建、读写、权限管理等操作,这些知识对于编写高效、安全的Linux程序非常重要。

相关推荐
智码看视界14 分钟前
Day59-阿里云ACK实战:生产级K8s集群部署与运维
运维·阿里云·kubernetes·k8s·日志监控·容器运维·阿里云ack
ltl1 小时前
QUIC 握手实现:Initial 到 1-RTT 的最小路径
linux
码视野2 小时前
基于 Vue3 + Element Plus 的【智慧新能源汽车充电桩运维调度与分时共享租赁系统】设计与实现(附完整源码与PRD)
运维·人工智能·汽车·vue3
qq_426003962 小时前
【UI自动化测试】UI自动化报错解决方案
运维·ui·自动化
网安蟹佬霸2 小时前
WAF绕过技术实战:从规则检测到编码绕过全指南(2026最新版,附Payload集与自动化脚本)
运维·安全·网络安全·架构·自动化·网安
小杨不想秃头3 小时前
信息安全工程师教程第二章密码学
运维·服务器·密码学
I'mChloe3 小时前
WGCLOUD怎么监控多台服务器?从Server、Agent 部署到监控面板实战
运维·服务器
Android系统攻城狮3 小时前
Linux PipeWire深度解析之pw_init调用流程与实战(八十三)
linux·运维·服务器·音频进阶·pipewire音频进阶
国科安芯3 小时前
轨道供电韧性:ASP4644四通道降压架构在低轨卫星平台电源管理中的适用性分析
运维·网络·数据库·嵌入式硬件·架构·状态模式·低轨卫星星座
M78佐菲4 小时前
Linux学习笔记:进程
linux·笔记·学习·算法