2021-03-16

Linux文件I/O函数

1.open函数
/******************************
函数功能:打开或者创建一个文件
函数参数:参数1:文件名(也可包含路径)
参数2: 文件打开时候的选项 O_RDWR:可读可写 O_CREAT(如果文件不存在就创建一个文件) )O_RDONLY(只读) O_WRONLY(只写)
(可以通过位或(|)来使用多个)
参数3:新建文件的权限
函数返回值:成功返回文件描述符(整数)失败返回-1
函数定义的头文件:#include<sys/stat.h> #include<fcntl.h>
*****************************/

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
	int c=open("1.txt",O_CREAT|O_RDWR,0666);
	if(c<0)
	{
		perror("创建失败\n");
		return -1;
	}
	printf("创建成功\n");
	printf("%d\n",c);
    system("uname -a");
	close(c);
	return 0;
}

2.close函数
/******************************
函数功能:关闭一个文件
函数参数:参数1:文件描述符
函数返回值:成功返回0 失败返回-1
函数定义的头文件:#include<unistd.h>
/
3.read函数
/
*
函数功能:读文件
函数参数:参数1:文件描述符 参数2:保存读取的数据数组 参数3:每次读取的字节数
函数返回值:成功返回读到的字节数 0已读到文件尾 -1读取错误
函数定义的头文件:#include<unistd.h>
*****************************/

#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
#include<stdio.h>
int main()
{
	int fd=open("12.txt",O_RDONLY,0444);
	if(fd<0)
	{
		perror("打开失败\n");
		return -1;
	}
	printf("打开成功\n");
	char buf[127];
    fd=read(fd,buf,sizeof(buf));
	if(fd<0)
	{
		perror("读取失败\n");
		return -1;
	}
	printf("读取成功\n");
	printf("%d %s\n",fd,buf);
	close(fd);
	return 0;
}

4.write写文件
/******************************
函数功能:写文件
函数参数:参数1:文件描述符 参数2:写入文件的数组数据 参数3:每次写的字节数
函数返回值:成功返回一写的字节数 -1读取错误
函数定义的头文件:#include<unistd.h>
/
5.lseek(文件定位函数)
/
*
函数功能:文件定位函数
函数参数:参数1:文件描述符 参数2:偏移量(以字节为单位)正数向前移动,负数向后移动。参数3:当前位置的基点 SEEK_SET(文件起始位置)SEEK_CUR:文件当前读写位置 SEEK_END:文件结束位置
函数返回值:成功返回当前读写位置 -1读取错误
函数定义的头文件:#include<unistd.h> #include<sys/types.h>
*****************************/

#include<unistd.h>
#include<stdio.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<string.h>
int main()
{
	int c=open("14.txt",O_RDWR|O_CREAT,0666);
	write(c,"hello",5);
	lseek(c,-2,SEEK_END);
	write(c,"ckk",3);
	lseek(c,0,SEEK_SET);  //设置到文件开始位置 偏移量为0
	char buff[127];
	read(c,buff,sizeof(buff));
	close(c);
	return 0;
}

5.dup(int fd)
/*********************************************
函数功能:dup函数创建一个新的文件描述符,该文件描述符和原有的文件描述符指向相同的文件。
函数参数
函数参数:复制的文件描述符
函数返回值:
成功:返回的是该“进程中为使用的最小文件描述符”
失败:返回-1 ,失败原因存在error中
/
/
**
6.dup2(int old,int newfd)
dup2与dup区别是dup2可以用参数newfd指定新文件描述符的数值。若参数newfd已经被程序使用,则系统就会将newfd所指的文件关闭,若newfd等于oldfd,则返回newfd,而不关闭newfd所指的文件
返回值:若dup2调用成功则返回新的文件描述符,出错则返回-1.
函数头文件:#include<unistd.h>
*********************************************/

#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<string.h>
#include<stdlib.h>
int main()
{
	int fd1=open("16.txt",O_RDWR|O_CREAT|O_APPEND,0666);
	write(fd1,"hello",sizeof("hello"));
	int fd2=dup(fd1);
	write(fd2,"world",sizeof("world"));
	int fd3=dup2(fd2,112);
	write(fd3,"deep",sizeof("deep"));
	printf("%d %d %d\n",fd1,fd2,fd3);
	system("cat 16.txt");   
	puts("");
	return 0;
}

运行结果如下:在这里插入图片描述
7.assecc
/*******************************
函数功能:检查调用进程是否可以对指定的文件执行某种操作。
函数参数:参数1:文件名(可以是路径)参数2:需要测试的操作模式
R_OK 测试读许可权 W_OK 测试写许可权
X_OK 测试执行许可权 F_OK 测试文件是否存在
函数返回值:成功执行时,返回0。失败返回-1
函数头文件:#include<unistd.h>
*******************************/

#include<unistd.h>
#include<stdio.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/types.h>
#include<string.h>
#include<stdlib.h>
int main()
{
	int fd=open("17.txt",O_CREAT|O_RDWR);
   int flag=access("17.txt",R_OK);
   if(flag==0)
   {
	   printf("有读权限\n");
   }
   else
   {
	   printf("没有读权限\n");
   }
   printf("%d\n",flag);
   system("chmod 100 17.txt");
   return 0;
}

8.总结
可以在linux 下用man 函数名查找这些函数的用法(主要是会查、会用)不要死记硬背。遇到时直接百度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2021-03-26 20:54:33,596 - Model - INFO - Epoch 1 (1/200): 2021-03-26 20:57:40,380 - Model - INFO - Train Instance Accuracy: 0.571037 2021-03-26 20:58:16,623 - Model - INFO - Test Instance Accuracy: 0.718528, Class Accuracy: 0.627357 2021-03-26 20:58:16,623 - Model - INFO - Best Instance Accuracy: 0.718528, Class Accuracy: 0.627357 2021-03-26 20:58:16,623 - Model - INFO - Save model... 2021-03-26 20:58:16,623 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 2021-03-26 20:58:16,698 - Model - INFO - Epoch 2 (2/200): 2021-03-26 21:01:26,685 - Model - INFO - Train Instance Accuracy: 0.727947 2021-03-26 21:02:03,642 - Model - INFO - Test Instance Accuracy: 0.790858, Class Accuracy: 0.702316 2021-03-26 21:02:03,642 - Model - INFO - Best Instance Accuracy: 0.790858, Class Accuracy: 0.702316 2021-03-26 21:02:03,642 - Model - INFO - Save model... 2021-03-26 21:02:03,643 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 2021-03-26 21:02:03,746 - Model - INFO - Epoch 3 (3/200): 2021-03-26 21:05:15,349 - Model - INFO - Train Instance Accuracy: 0.781606 2021-03-26 21:05:51,538 - Model - INFO - Test Instance Accuracy: 0.803641, Class Accuracy: 0.738575 2021-03-26 21:05:51,538 - Model - INFO - Best Instance Accuracy: 0.803641, Class Accuracy: 0.738575 2021-03-26 21:05:51,539 - Model - INFO - Save model... 2021-03-26 21:05:51,539 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 我有类似于这样的一段txt文件,请你帮我写一段代码来可视化这些训练结果
02-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值