1、文件IO的open、close
//关于文件IO中open和close操作
#include <myhead.h>
int main(int argc, const char *argv[])
{
//定义文件描述符
int fd;
//以只读的方式打开文件,并且创建文件
if((fd=open("./hello,txt",O_WRONLY|O_CREAT|O_EXCL,0664))==-1)
{
//判断什么原因出错
if(errno==EEXIST)
{
printf("文件已经存在,无需重新创建,直接打开即可\n");
fd=open("./hello.txt",O_WRONLY|O_TRUNC);
}else
{
perror("open error");
return -1;
}
}
//输出该文件的文件描述符
printf("fd=%d\n",fd);
//关闭文件
if(close(fd)==0)
{
printf("文件关闭成功\n");
}else
{
perror("close error");
}
return 0;
}
运行结果
![]()
2、文件IO的read、write
//关于文件IO的read和write
//使用read、write完成两个文件的拷贝
#include <myhead.h>
int main(int argc, const char *argv[])
{
//判断文件传输个数
if(argc!=3)
{
printf("input file error\n");
printf("usage:./a.out srcfile destfile\n");
}
//定义两个文件描述符
int srcfd; //文件描述符为整数,并且遵循最小未使用原则
//以只读的方式打开源文件
if((srcfd=open(argv[1],O_RDONLY))==-1)
{
perror("open srcfile error");
return -1;
}
int destfd;
//以只写的方式打开目标文件,并创建
if((destfd=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0664))==-1)
{
perror("open destfile error");
return -1;
}
//定义搬运工
char buf[128]="";
int ret =0;
while((ret=read(srcfd,buf,sizeof(buf)))>0)
{
//将读取的数据写入新文件中
write(destfd,buf,ret);
}
printf("拷贝成功\n");
//关闭文件
close(srcfd);
close(destfd);
return 0;
}
3、文件IO的lseek
使用lseek读取图像的大小,并更改图像
//文件IO的光标移动操作(lseek)
//使用lseek读取图像的大小,并更改图像
#include <myhead.h>
int main(int argc, const char *argv[])
{
//定义文件描述符
int fd;
if((fd=open("./sanzi.bmp",O_RDWR))==-1)
{
perror("open error");
return -1;
}
unsigned int SIZE=lseek(fd,0,SEEK_END);
printf("size = %d\n",SIZE);
//定义颜色
unsigned char color[3]={255,255,0};
//定位光标
lseek(fd,54,SEEK_SET);
for(int i=0;i<400;i++)
{
for(int j=0;j<500;j++)
{
write(fd,color,sizeof(color));
}
}
//关闭文件
close(fd);
return 0;
}
4、目录的操作(opendir、closedir)
#include<myhead.h>
int main(int argc, const char *argv[])
{
//定义目录指针
DIR *dp;
//打开一个目录
if((dp = opendir("./")) == NULL)
{
perror("opendir error");
return -1;
}
//定义遍历指针,将所有文件进行遍历
struct dirent *q = NULL;
while((q=readdir(dp)) != NULL)
{
//输出当前遍历到的文件信息
printf("name = %10s\tinode = %ld\tsize = %d\t, type = %#o\t",\
q->d_name, q->d_ino, q->d_reclen, q->d_type);
switch(q->d_type)
{
case DT_BLK:
{
printf("块设备文件\n");
}
break;
case DT_CHR:
{
printf("字符设备文件\n");
}
break;
case DT_DIR:
{
printf("目录文件\n");
}
break;
case DT_FIFO:
{
printf("管道文件\n");
}
break;
case DT_LNK:
{
printf("链接文件\n");
}
break;
case DT_REG:
{
printf("普通文件\n");
}
break;
case DT_SOCK:
{
printf("套接字文件\n");
}
break;
default:printf("不知名文件\n");
}
}
//关闭目录
closedir(dp);
return 0;
}
5、文件IO思维导图