文件IO---lseek、fcntl函数

Linux标准IO 文本IO lseek fseek Linux 文本IO lseek 阅读详情

lseek

lseek()用来控制文件的读写位置。(移动读写指针位置)。
每个打开的文件都记录着当前读写位置,打开文件时读写位置是0,表示文件开头,通常读写多少个字节就会将读写位置往后移多少个字节。

用法:

#include <sys/types.h>
#include <unistd.h>

off_t lseek(int fd, off_t offset, int whence);
/*lseek成功返回偏移量,失败返回-1*/

whence:

  • SEEK_SET 将读写位置指向文件头后再增加offset个位移量
  • SEEK_CUR 以目前的读写位置往后增加offset个位移量
  • SEEK_END 将读写位置指向文件尾后再增加offset个位移量

实例:

1)用lseek拓展一个空文件abc。

lseek_test1.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>

int main(void)
{
        int fd;
        fd = open("abc", O_RDWR);
        if(fd < 0)
        {
                perror("open abc");
                exit(-1);
        }
        /* 0x1000相当于4096字节 */
        lseek(fd, 0x1000, SEEK_SET);
        /* 扩展一个文件,一定要有一次写操作 */
        write(fd, "a", 1);
        close(fd);
        return 0;
}

这里写图片描述

2)lseek获取一个文件的大小。
lseek_test2.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(void)
{
        int fd;
        fd = open("hello", O_RDONLY);
        if(fd < 0)
        {
                perror("open hello");
                exit(-1);
        }
        printf("%d\n", lseek(fd, 0, SEEK_END));
        close(fd);
        return 0;
}
 gcc lseek_test2.c -o lseek_test2

这里写图片描述

fcntl

fcntl获取或设置文件访问控制属性。可改变一个已打开的文件的属性,可以重新设置读、写、追加、非阻塞等标志(这 些标志称为File Status Flag),而不必重新open文件。

用法:

#include <unistd.h>
#include <fcntl.h>
/* 可变参函数 */
int fcntl(int fd, int cmd, ... /* arg */ );

可变参数的类型和个数取决于前面的 cmd参数。

File Status Flag:
- F_GETFL 获得文件状态标志
- F_SETFL 设置文件状态标志

实例:

fcntl改变一个已打开文件的属性。
对非阻塞读终端代码修改。

...
#define MSG_TRY "try again\n"

int main(void)
{
        int flags, n;
        char buf[10];
        /* 这样就不用重新open /dev/tty 设置O_NONBLOCK*/
        flags = fcntl(STDIN_FILENO, F_GETFL);
        flags |= O_NONBLOCK;
        if(fcntl(STD_FILENO, F_SETFL, flags) == -1)
        {
                perror("fcntl");
                exit(1);
        }
tryagain:
......
}
一.linux应用&网络编程之文件IO 有道云笔记地址:http://note.youdao.com/noteshare?id=7db133b182f498d61c2b5883fa460463&amp;sub=0E2B5152A6EC4848AA1D193370ABC025 1.典型的嵌入式产品开发的顺序 1、让Linux系统在硬件上跑起来(系统移植工作) 2、基于Linux系统来开发应用程序实现产品功能(应用编程属于这一步骤... 阅读详情

相关推荐

微电网模型Matlab Simulink,风光储微电网,永磁风机并网仿真,光伏并网仿真,蓄电池仿真

通过探究风光储微电网、永磁风机并网仿真、光伏并网仿真、蓄电池仿真、柴油发电机以及光储微电网和风储微电网等方面的技术,我们可以更好地理解微电网的工作原理和优化方法,从而为微电网的发展做出更大的贡献。微电网模型Matlab Simulink,风光储微电网,永磁风机并网仿真,光伏并网仿真,蓄电池仿真,柴油发电机,光储微电网 风储微电网 Matlab仿真平台搭建的风光储微电网模型,风光柴储微电网,pwm控制,风力发电,光伏发电,微电网并网离网切换,并网孤岛切换,功能强大。永磁风机的并网仿真是一个非常重要的环节。

sjbextz的博客 399

一文读懂 Linux 的 I/O 函数:`open/read/write/lseek` 与 `fopen/fread/fwrite` 的区别与联系

open():打开一个文件,返回文件描述符(fd)。read():从文件中读取数据到用户缓冲区。write():将用户缓冲区的数据写入文件。lseek():移动文件读写位置。close():关闭文件描述符。这些函数操作的核心是文件描述符(file descriptor),是内核为每个打开的文件分配的一个整数索引。这些函数操作的核心是FILE 指针一个文件描述符(来自系统调用)一个用户态缓冲区文件读写位置、状态标志等函数刷新层级参数类型说明fflush()

坏柠的博客 829

安时积分法和开路电压法结合估算锂电池SOC

基于安时积分法和开路电压法结合的锂电池SOC估计Simulink仿真建模,利用安时积分法计算放电过程中的SOC,在搁置状态利用开路电压法进行SOC修正。

qq_39304296的博客 2552

文件IO基础之lseek函数的理解

首先说一下lseek函数的原型 off_t lseek(int fd, off_t offset, int whence); off_t —— 返回值,返回文件大小 fd —— 所需要操作的文件,为打开文件(open函数)的返回值(文件描述符) offset —— 为文件指针位置(如果是获取文件大小,那么它就是终点。如果是读写文件内容,那么它就是起点)。其取值可为正数或者为负数,但whence参数为SEEK_SET时,它只能为正数 whence——文件指针位置的参考点。其为一个宏定义,分别有SEE

weixin_49872754的博客 1733

Rasa Core开发指南

文章目录1. Rasa Core简介1.1 Rasa Core消息处理流程1.2 安装Rasa Core2. Dialogue模型训练2.1 Story样本数据2.2 Domain2.2.0 intents2.2.1 actions2.2.2 templates2.2.3 entities2.2.4 slots3 .训练和使用对话模型3.1 训练对话模型3.2 使用对话模型4. 搭建CustomA...

老蒋也疯狂 1万+

手把手教你搞定Pattern Recognition期刊的LaTeX投稿(附完整模板下载与避坑指南)

本文详细指导如何在Pattern Recognition期刊上使用LaTeX进行投稿,包括模板下载、环境配置、核心排版规范及投稿材料准备。特别强调期刊对格式的严格要求,如数学符号、图像引用等细节,并提供实用技巧和避坑指南,帮助作者高效完成投稿流程。

weixin_30876945的博客 394

Linux学习日记11——fcntl、lseek、传入传出参数

学习视频链接 黑马程序员-Linux系统编程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1KE411q7ee?p=58&spm_id_from=pageDriver 一、fcntl 函数 1.1 作用 改变一个已经打开的文件的访问控制属性 重点掌握两个参数的使用,F_GETFL 和 F_SETFL 1.2 查看函数介绍 1、man fcntl 2、fcntl int flags = fcntl(fd, F_GETFL

HuanBianCheng27的博客 819

ESD放电路径分析

当金属外壳接地情况下,大部分外部干扰信号将会通过外壳,外壳到接地点,再由接地点回到干扰信号的地,实现干扰信号的回流,这点不仅仅适用于​ESD,对于其他的RI类干扰,也同样适合。发现内部金属板跟外壳的搭接处存在较多的缝隙点,该缝隙点对于频率较高的信号能够实现较为理想的回流,但是对于频率没有那么高的信号,则较难以实现回流,我们尝试将这些缝隙用铜箔包裹住,充分降低该金属板跟外壳的接触阻抗​。我们分析,路径3其实是不期望的路径,我们最期望的路径是1,或者2的内部金属部件跟外壳良好接触情况下的路径。

domen_pan的博客 2227

lseek函数

所有打开的文件都有一个当前文件偏移量(current file offset),以下简称为 cfo。cfo 通常是一个非负整数,用于表明文件开始处到文件当前位置的字节数。读写操作通常开始于 cfo,并且使 cfo 增大,增量为读写的字节数。文件被打开时,cfo 会被初始化为

1903

sdio wifi 移植

介绍 简单来说,sdio起源自sd标准,顾名思义就是sd的IO接口(interface)的意思,更具体的说明,sd本来是记忆卡的标准,但是现在也可以把SD卡拿来插上一些外围设备接口使用,这个就是就叫做sdio。 而且sdio本身是一种相当单纯的技术,通过sd的IO引脚来连接外部外围,并且通过sd的IO数据接位与外围传输数据,而且sd协会也推出很完整的sdio stack 驱动程序,使得sdio外围得开发与应用变得非常热门 这里我们要移植的是RTL8822cs的sdio WiFi 模块,将其移植到rk3

Enosji的博客 9609

leaflet 综合教程170+ 【目录 】(已包含162篇文章)

vue+leaflet系列教程旨在为开发者提供简单快捷的,。在每一个示例中,解释相应的API知识点,做到。注意本示例目录中的内容可能加载是vue+openlayers的示例, 本目录是要加载vue+leaflet的示例,只是内容少,逐渐更新中。

大剑师兰特的GIS世界 1万+

【Linux操作系统】举例解释Linux系统编程中文件io常用的函数

文件IO操作是Linux系统编程中的重要部分。通过open()close()read()write()等函数,我们可以对文件进行打开、读取和写入操作。通过lseek()函数,我们可以在文件中进行定位。而通过stat()fcntl()dup()等函数,我们可以获取文件的状态信息,对文件描述符进行控制操作,复制文件描述符等。除了上述的函数,还有许多其他的函数可以用于文件IO操作,如mkdir()用于创建目录,rmdir()用于删除目录,unlink()用于删除文件,rename()用于重命名文件等。

Goforyouqp的博客 9511

【异常】解决 Claude Code 及第三方插件提示 “API Error: 404“ 的配置修复指南

在使用 Claude 相关的 CLI 工具(如)或 IDE 插件进行开发辅助时,配置错误的模型参数是导致连接失败的常见原因。本文将针对这一典型报错进行复盘与解决。

奶爸的编程之路,也就一周冷个三天 7747

文件IO操作

本文主要内容是系统IO和标准IO常用函数的详细介绍(函数原型、参数、返回值)

2301_77381582的博客 838

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

应用编程和网络编程-linux中的文件IO

(1)IO就是input/output,输入/输出。文件IO的意思就是读写文件。

m0_71583957的博客 1006

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Linux系统编程——文件IO

文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。fopen函数的第一个参数是文件名,第二个参数是打开方式。fclose函数的参数里放的是文件名。1.4 fseek。

weixin_69032308的博客 809

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Linux应用编程--IO文件

(1)整个嵌入式linux核心课程包括5个点,按照学习顺序依次是:裸机,c高级,uboot和系统移植,linux应用编程和网络编程,驱动(2)典型的嵌入式产品就是基于嵌入式linux操作系统来工作。典型的嵌入式产品的研发是:第一步让linux系统在硬件上跑起来(系统移植工作)第二部是基于linux系统来开发应用程序实现产品功能。(3)基于Linux去做应用编程,其实就是通过调用Linux的系统API来实现应用想要完成的任务。

m0_63077733的博客 226

Linux系统编程IO/文件/目录操作

IO函数 open close read write lseek fcntl 文件操作函数:

铍镁钙锶钡镭 266

Linux学习笔记-文件IO

11-系统编程阶段说再前面的话_哔哩哔哩_bilibili。

迷途 232

Linux中有关文件的操作

文件描述符,文件的打开与关闭,文件的读写,文件的偏移量,文件描述符的复制,打印报错

gemluoye的博客 1274

Linux系统IO和文件属性操作函数

fcntl()-------操作文件描述符,对于已经打开的文件描述符执行各种操作。lseek()-------文件读和写使用同一位置偏移量。stat()—用于获取指定文件的信息。

m0_52927494的博客 691

系统io,write read,重定向open,lseek(SEEK_SET,SEEKCUR,SEEKEND)

/* 区别与c语言中的文件IO:只能向普通文件内进行输入和输出,lsd中的文件io,他可以向任何类型的文件进行输入和输出操作。 由于linux中万物皆文件,包括运行中的两个程序也是两个文件,我们就可以通过lsd中的文件io向运行中的两个程序写入信息来达到数据通讯的效果。 / / lsd中文件io的一组函数 : read 和 write 函数名: write 头文件:sys/type.h,unist...

DearLord的博客 2425

linux中的文件IO

linux中的文件IO

qq_28576837的博客 529

文件IO(文件IO三)

讲解文件IO中打开、关闭文件、读写操作、非读写和读目录操作等一系列文件IO操作。

Java.L的博客 565

Linux C/C++编程之(十三)系统IO函数

文章目录一、概述二、当头棒喝三、函数概述四、IO函数介绍1)open2)close3)read 一、概述 二、当头棒喝 去掉代码中的注释掉的 fflush 再试下: 系统默认会打开三个文件描述符(stdin,stdout,stderr),在程序中 close(1) 关掉了标准输出,此时 open 打开返回的是最小可用的文件描述符,也就是 fd = 1,因此 printf 本应该打印到文件中,但是 close(fd) 不会触发 buffer 刷新,因此既不会输出到屏幕也没有输出到 msg.log 中

种树最好的时间是10年前,其次是现在!!! 5390

《unix环境编程》笔记-文件IO

1. lseek函数返回的新的文件偏移量 通常文件的当前文件偏移量是个非负整数,但是某些设备也可能允许负的偏移量,所以在笔记lseek的返回值时,应该测试其是否等于-1,不判断是否小于0 2. IO的效率在BUFFSIZE=4096时效率最高 3. ./a.out 5 5 子句5 4. fcntl函数 在修改文件描述符标志或文件状态标志时,先要取得文件标志,然后修改,然后再设置新标志,

kinado的专栏 668
上一篇: sudo的配置文件/etc/sudoers
下一篇: 文件系统---认识ext2文件系统
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值