您的位置:首页 > 运维架构 > Linux

LINUX 系统编程之文件IO

2018-01-02 16:53 302 查看
文件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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: