文件IO,属于系统IO,是系统内核向用户空间提供的接口,直接调用内核提供的系统调用函数, 头文件是unistd.h
1、open(char *s, flag, mode)
在fcntl.h头文件种声明。函数的作用:创建或打开某个文件,最多包含三个参数。
第一个参数,char * 包含有文件名和路径
第二个参数,flag 指定打开文件的方式
第二个参数,mode 指定创建文件的权限
flag内容:
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
O_CREAT 创建一个文件
O_EXCL 如果使用O_CREAT时文件存在,则可返回错误消息。这一参数可以测试文件是否存在。
O_TRUNC 打开文件,会把已存在的文件内容清空
O_APPEND 以追加的方式打开文件,不清空文件内容
open函数返回值
成功,文件描述符(file ID简称fd),它是一个非负的整数,即文件的ID号;出错返回-1.
2、read(int fd, void *buff, size_t count)
第一个参数:从哪一个文件中去读;
第二个参数:读到什么地方去;
第三个参数:读多少个。
函数的返回值:是实际读的字节数。
3、write(int fd, void *buff, size_t count)
第一个参数,即文件描述符,指定向哪个文件中写入
第二个参数,指定向文件中写入什么内容
第三个参数,向文件中写如多少个
返回值是实际写入的字节数
4、lseek(int fd, off_t offset, int whence)
该函数的头文件:sys/types.h unistd.h;
功能:调整读写的位置指针;
第一个参数:要调整的文件的文件描述符;
第二个参数:偏移量,每一读写操作所需要移动的距离,单位是字节的数量,可正可负(向前移,向后移);
第三个参数:当前位置的基点,有三个标志,
SEEK_SET:当前位置为文件的开头,新位置为偏移量的大小;
SEEK_CUR:当前位置为文件指针的位置,新位置为当前位置加上偏移量。
SEEK_END:当前位置为文件的结尾,新位置为文件的大小加上偏移量的大小。
函数的返回值:成功:文件当前的位置,出错:-1。
5、close(fd),
调用close()函数可以关闭一个打开的文件。
调用成功返回0,出错返回-1,并设置errno;
注:当一个进程终止时,该进程打开的所有文件都由内核自动关闭;
6、文件IO ,CP命令示例:
int main(int argc, char *argv[])
{
if (argc < 3)
{
printf("Please input fileName");
}
int openRet1,openRet2;
int readRet, writeRet;
char buffer[128] = {0};
if((openRet1 = open(argv[1], O_RDONLY)) != -1)
{
printf("文件打开成功,FILE_ID = %d\n",openRet1);
}
else
{
printf("%s文件打开失败\n", argv[1]);
return -1;
}
if((openRet2 = open(argv[2], O_WRONLY)) != -1)
{
printf("文件打开成功,FILE_ID = %d\n",openRet2);
}
else
{
printf("%s文件打开失败\n", argv[2]);
return -2;
}
while(1)
{
readRet = read(openRet1, buffer, sizeof(buffer));
//判断是否读完,当实际读取的字节数小于目标值时,跳出循环
if(readRet < sizeof(buffer))
{
printf("readRet = %d\n", readRet);
break;
}
writeRet = write(openRet2, buffer, readRet);
memset(buffer, 0, sizeof(buffer));
}
writeRet = write(openRet2, buffer,readRet);
close(openRet1);
close(openRet2);
}