linux 文件编程

标准IO和文件IO是计算机编程中用于处理输入/输出(Input/Output,简称IO)操作的两种不同方式,它们各自具有不同的特点和使用场景。

一、定义与特点

标准IO

  • 定义:标准IO通常指的是C语言提供的标准库中的IO操作,主要涉及与标准输入(stdin)、标准输出(stdout)和标准错误(stderr)的交互。
  • 特点
    • 跨平台性:由于是基于C语言标准库,因此可以在不同的操作系统平台上编译和执行。
    • 缓冲机制:标准IO在文件IO的基础上封装了缓冲机制,先读写缓冲区,必要时再访问实际文件,从而减少系统调用次数,提高执行效率。
    • 使用文件流指针:通过文件指针(FILE*)来操作文件,文件指针指向一个FILE结构体,该结构体包含了文件的属性和缓冲区等信息。

文件IO

  • 定义:文件IO一般指的是Linux系统调用层面的IO操作,是操作系统提供的接口函数,用于对文件的读取和写入。
  • 特点
    • 系统调用:直接通过系统调用来实现文件的读写操作,没有缓冲机制。
    • 使用文件描述符:文件描述符是一个非负整数,用于标识打开或创建的文件,通过文件描述符来间接找到文件并对其进行操作。
    • 可操作多种类型文件:不仅可以操作普通文件,还可以操作设备文件、管道文件、套接字文件等。

二、主要函数与操作

标准IO的主要函数

  • fopen():打开文件,并返回一个文件指针。
  • fclose():关闭文件。
  • fread():从文件中读取数据。
  • fwrite():向文件中写入数据。
  • fseek():移动文件指针到指定位置。

文件IO的主要系统调用

  • open():打开文件,并返回一个文件描述符。
  • close():关闭文件。
  • read():从文件中读取数据。
  • write():向文件中写入数据。
  • lseek():移动文件描述符的读写位置。

三、区别与联系

区别

  1. 跨平台性:标准IO可以在不同的操作系统平台上编译和执行,而文件IO通常局限于类UNIX环境。
  2. 缓冲机制:标准IO带有缓冲机制,而文件IO没有缓冲机制,每次操作都会执行系统调用。
  3. 接口:标准IO使用文件流指针(FILE*)作为接口,而文件IO使用文件描述符(非负整数)作为接口。
  4. 效率:由于标准IO带有缓冲机制,因此其执行效率通常高于文件IO。
  5. 可操作文件类型:文件IO可以操作多种类型的文件,而标准IO通常只用于操作普通文件。

联系

  • 标准IO是基于文件IO的封装,它在文件IO的基础上增加了缓冲机制等高级功能。
  • 在Linux系统中,标准IO的实现通常依赖于系统调用(如read()write()等),但通过封装提供了更高级、更易于使用的接口。

  1. 标准IO

   也称为标准输入输出(Standard Input/Output),是计算机编程中一种常见的IO操作方式,特别是在C语言及其衍生语言中广泛使用。它主要通过标准C库中的函数来实现,提供了丰富的接口用于数据的输入和输出。

文本文件是一种计算机文件,它包含的是人类可读的文本数据,而不是二进制代码或机器语言。

2,文件的概念,作用

    linux中一切都是文件。文件用来存储数据(数据,指令);

3,linux中文件的类型,

    7种,d为目录 ,-为普通文件,l为软链接(符号链接,类似于快捷方式),p管道文件,s套接字文件, ,c为字符设备,b块设备

流:   FILE*
struct FILE
{
}
    数据从文件当中流入和流出所体现出来的字节
    流叫做流

    流的分类:
        二进制流: 2001 \n
            二进制数据的流
        文本流:
            ASCII码数据的流 \n \t 
FILE 结构定义的对象 FILE * 称之为流对象,也叫文件流指针。
流对象 ===》头 《===数据====》尾

stdin  FILE*   scanf ();
stdout         printf();
stderr

4、ll命令为显示当前目录下文件的详细信息

开头第一个字符即为文件的类型

后面可分为三部分rw-   rw-   r--

第一部分为用户权限,即后面的第一个linux,第二个为小组权限,即第二个linux

r为读,w为写,x可执行

可改为二进制,八进制

eg:-w-   --x   r--

       010  001  100

        2       1       4

1为硬链接,多个文件名关联一个文件内容

组名linux后面为文件的大小

再后面为最后一次修改时间

#include <stdio.h>
//  ./a.out 4 5 56 7 8 
int main(int argc, char *argv[])
{

    if(argc<3)
    {
        printf("usage:./a.out srcfile dstfile\n");
        return 1;
    }
    FILE *src = fopen(argv[1],"r");
    FILE * dst= fopen(argv[2],"w");
    if(NULL == src || NULL == dst )
    {
        printf("fopen error\n");
        return 1;
    }
    while(1)
    {
        int c = fgetc(src);
        if(EOF== c)
        {
            break;
        }
        fputc(c,dst);
    }

    fclose(dst);
    fclose(src);
    return 0;
}

fwrite函数返回成功写入文件的数据项个数。这个值可以与count参数进行比较,以检查是否所有数据都被成功写入。返回值小于形参size_t count,表示错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值