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 函数名查找这些函数的用法(主要是会查、会用)不要死记硬背。遇到时直接百度。