一、C语言进阶:文件操作

2023-11-02

1 文件操作

1.1 文件的输入输出

输出:使用printf()和命令行重定向>实现文件输出;
输入:使用scanf()和命令行重定向<实现文件输入。

#include <stdio.h>
//printf() 写入文件 ./a.out > hello.txt
//scanf() 从文件读 ./a.out < hello.txt
int main(){
    char name[20];
    scanf("%s",name);
    printf("Hello %s!\n",name);
}

1.2 文件打开fopen()和关闭fclose()

fopen()函数原型:

FILE *fopen(char restrict *filename, char restrict *mode);

restrict C99标准才引进的,属于类型修饰符,表示修饰的这块内存空间只能被这个指针引用和修改,除此之外别无他法。

如果文件顺利打开,则返回值是指向这个文件流的文件指针,如果文件打开失败,返回NULL。

  • filename:需要打开的文件
  • mode:打开方式
    mode的几种类型
    1、r: 读
    2、w: 写
    3、a: 追加
    4、+: 读或写,配合r、w、a使用
    5、t: 文本文件
    6、b: 二进制文件
    注:a只能追加不能修改,w会把文件清空,r+读写方式可以修改文件原有内容。

fclose()函数原型:

int flcose(FILE* stream);

stream: 函数指针
返回值:成功返回0,否则返回-1

1.3 文本读写fprintf()fscanf()

  • 函数原型
int fprintf(FILE *stream, char *format, argument...);
int fscanf(FILE *stream, char *format, argument... );

fprintf()/fscanf()printf()/scanf()使用非常相似,区别在于fprintf()/fscanf()第一个参数stream是文件描述符。

  • 实例:
#include <stdio.h>
int main(){
    char name[20];
    fscanf(stdin,"%s",name); //stdin标准读,从终端读
    fprintf(stdout,"Hello %s!\n",name); //stdout标准写,向终端写
}

  • 实例:学生信息的读入读出
#include <stdio.h>
typedef struct{
    char name[20];
    int age;
    float score;
} Stu;
int main(){
    FILE* pfile = fopen("./student","r");
    if(NULL == pfile){
        printf("file is not exited!\n");
        return 1;
    }
    int n;
    fscanf(pfile,"%d",&n);
    Stu s[n];
    for(int i = 0;i < n;++i){
        fscanf(pfile,"%s%d%f",&s[i].name,&s[i].age,&s[i].score);
    }
    fclose(pfile);
    pfile = NULL;

    FILE* pfile2 = fopen("./student2","w");
    if(NULL == pfile2){
        printf("file ./student2 is not exited!\n");
        return 1;
    }
    for(int i = 0;i < n;++i){
        fprintf(pfile2,"%s %d %.2f\n",s[i].name,s[i].age,s[i].score);
    }
    fclose(pfile2);
    pfile2 = NULL;
}
  • 学生信息管理: 采用fprintf()fscanf() 实现增删查改
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
typedef struct{
    char name[20];
    int age;
    float score;
} Stu;
bool Load(const char* path,Stu* s,int* n){
    FILE* file = fopen(path,"r");
    if(NULL == file){
    	printf("file is not exited!\n");
	return false;
    }
    int m;
    fscanf(file,"%d",&m);
    *n = m;
    for(int i = 0;i < m;++i){
    	fscanf(file,"%s%d%f",&s[i].name,&s[i].age,&s[i].score);
    }
    fclose(file);
    file = NULL;
    return true;
}
void ShowStudents(Stu* s,int n){
    for(int i = 0;i < n;++i){
        printf("%s %d %f\n",s[i].name,s[i].age,s[i].score);
    }
}
void SaveStudents(const char* path,Stu* s,int* n){
    FILE* file = fopen(path,"w");
    if(NULL == file){
    	printf("file is not exited!\n");
	return;
    }
    fprintf(file,"%d\n",*n);
    for(int i = 0;i < *n;++i){
    	fprintf(file,"%s %d %f\n",s[i].name,s[i].age,s[i].score);
    }
    fclose(file);
    file = NULL;
}
void Register(const char* path,Stu* s,int* n){
    int before = *n;
    printf("请输入录入学生个数:");
    int append_num;
    scanf("%d",&append_num);
    *n += append_num;
    printf("请依次输入学生姓名,年龄和成绩:\n");
    for(int i = before;i < *n;++i){
    	scanf("%s%d%f",&s[i].name,&s[i].age,&s[i].score);
    }
    SaveStudents(path,s,n);
}
int cmp(const void* a,const void* b){
    return ((Stu*)(a))->score < ((Stu*)(b))->score?1:-1;
}
void SortStudents(Stu* s,int n){
    qsort(s,n,sizeof(Stu),cmp);
    ShowStudents(s,n);
}
void SearchStudents(Stu* s,int n){
    printf("请输入学生姓名:");
    char name[20];
    scanf("%s",name);
    bool found = false;
    for(int i = 0;i < n;++i){
    	if(strcmp(name,s[i].name) == 0){
	    found = true;
	    printf("查询结果:%s %d %f\n",s[i].name,s[i].age,s[i].score);
	}
    }
    if(!found){
    	printf("查无此人!\n");
    }
}
void DeleteStudents(const char* path,Stu* s,int* n){
    printf("请输入学生姓名:");
    char name[20];
    scanf("%s",name);
    bool found = false;
    for(int i = 0;i < *n;++i){
    	if(strcmp(name,s[i].name) == 0){
	    found = true;
	    for(int j = i+1;j < *n;++j){
	    	s[i++] = s[j];
	    }
	    *n -= 1;
	    printf("删除成功!\n");
	    break;
	}
    }
    if(!found){
    	printf("查无此人!\n");
	return;
    }
    SaveStudents(path,s,n);
}

void ModifyStudents(const void* path,Stu* s,int n){
    printf("请输入学生姓名:");
    char name[20];
    scanf("%s",name);
    bool found = false;
    for(int i = 0;i < n;++i){
    	if(strcmp(name,s[i].name) == 0){
	    found = true;
	    printf("请依次输入修改后的信息:姓名 年龄 成绩\n");
	    scanf("%s%d%f",&s[i].name,&s[i].age,&s[i].score);
	    break;
	}
    }
    if(!found){
    	printf("查无此人!\n");
	return;
    }
    SaveStudents(path,s,&n);
}
int main(){
    const char* data = "./student.txt";
    Stu s[10];
    int n;
    if(Load(data,s,&n)){
    	printf("已经加载%d名学生信息\n",n);  
    }
    while(true){
    	printf("功能列表:\n");
		printf("1.查看所有学生信息\n");
		printf("2.录入学生信息\n");
		printf("3.按成绩排序\n");
		printf("4.查询学生信息\n");
		printf("5.删除学生信息\n");
		printf("6.修改学生信息 \n");
		printf("0.退出\n");
	int num;
	scanf("%d",&num);
	switch(num){
	    case 1: 
			ShowStudents(s,n);
			break;
 	    case 2:
	        Register(data,s,&n);
			break;
	    case 3:
			SortStudents(s,n);
	        break;
	    case 4:
			SearchStudents(s,n);
			break;
	    case 5:
			DeleteStudents(data,s,&n);
			break;
	    case 6:
			ModifyStudents(data,s,n);
			break;
	   	case 0:
			return 0;
	}
    }
}

1.4 二进制读和写:fread()和fwrite()

  • 函数原型
size_t fread(void *ptr, size_t size, size_t count, FILE* stream);
size_t fwrite(void *ptr, size_t size, size_t count, FILE* stream);

ptr: 一个指针,在fread()中是从文件里读入的数据存放的地址;在fwrite()中是写入到文件里的数据存放的地址。

ptr 指针,在fread()中是从文件里读入的数据存放的地址;在fwrite()中是写入到文件里的数据存放的地址
size 每次要读写的字节数
count 读写的次数
stream 文件指针
  • 返回值:成功读取/写入的字节数
  • 实例:fread()和fwrite()实现文件读和写
#include <stdio.h>
#include <string.h>
int main(){
    FILE* fp= fopen("./hello.txt","rw");
    char str[] = "Hello World";
    fwrite(str,sizeof(str),1,fp);
    char str1[20];
    fread(str1,sizeof(str1),1,fp);
    printf("%s\n",str1);
}
  • 学生信息管理: 采用fread()和fwrite() 实现增删查改
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
typedef struct{
    char name[20];
    int age;
    float score;
} Stu;
bool Load(const char* path,Stu* s,int* n){
    FILE* file = fopen(path,"rb");
    if(NULL == file){
    	printf("file is not exited!\n");
	return false;
    }
    int m;
    fread(&m,sizeof(m),1,file);
    //fscanf(file,"%d",&m);
    *n = m;
    fread(s,sizeof(Stu),m,file);
    /*
    for(int i = 0;i < m;++i){
    	fscanf(file,"%s%d%f",&s[i].name,&s[i].age,&s[i].score);
    }
    */
    fclose(file);
    file = NULL;
    return true;
}
void ShowStudents(Stu* s,int n){
    for(int i = 0;i < n;++i){
        printf("%s %d %f\n",s[i].name,s[i].age,s[i].score);
    }
}
void SaveStudents(const char* path,Stu* s,int n){
    FILE* file = fopen(path,"wb");
    if(NULL == file){
    	printf("file is not exited!\n");
	return;
    }
    fwrite(&n,sizeof(n),1,file);
    //fprintf(file,"%d\n",*n);
    fwrite(s,sizeof(Stu),n,file);
    /*
    for(int i = 0;i < *n;++i){
    	fprintf(file,"%s %d %f\n",s[i].name,s[i].age,s[i].score);
    }
    */
    fclose(file);
    file = NULL;
}
void Register(const char* path,Stu* s,int* n){
    int before = *n;
    printf("请输入录入学生个数:");
    int append_num;
    scanf("%d",&append_num);
    *n += append_num;
    printf("请依次输入学生姓名,年龄和成绩:\n");
    for(int i = before;i < *n;++i){
    	scanf("%s%d%f",&s[i].name,&s[i].age,&s[i].score);
    }
    SaveStudents(path,s,*n);
}
int cmp(const void* a,const void* b){
    return ((Stu*)(a))->score < ((Stu*)(b))->score?1:-1;
}
void SortStudents(Stu* s,int n){
    qsort(s,n,sizeof(Stu),cmp);
    ShowStudents(s,n);
}
void SearchStudents(Stu* s,int n){
    printf("请输入学生姓名:");
    char name[20];
    scanf("%s",name);
    bool found = false;
    for(int i = 0;i < n;++i){
    	if(strcmp(name,s[i].name) == 0){
	    found = true;
	    printf("查询结果:%s %d %f\n",s[i].name,s[i].age,s[i].score);
	}
    }
    if(!found){
    	printf("查无此人!\n");
    }
}
void DeleteStudents(const char* path,Stu* s,int* n){
    printf("请输入学生姓名:");
    char name[20];
    scanf("%s",name);
    bool found = false;
    for(int i = 0;i < *n;++i){
    	if(strcmp(name,s[i].name) == 0){
	    found = true;
	    for(int j = i+1;j < *n;++j){
	    	s[i++] = s[j];
	    }
	    *n -= 1;
	    printf("删除成功!\n");
	    break;
	}
    }
    if(!found){
    	printf("查无此人!\n");
	return;
    }
    SaveStudents(path,s,*n);
}

void ModifyStudents(const void* path,Stu* s,int n){
    printf("请输入学生姓名:");
    char name[20];
    scanf("%s",name);
    bool found = false;
    for(int i = 0;i < n;++i){
    	if(strcmp(name,s[i].name) == 0){
	    found = true;
	    printf("请依次输入修改后的信息:姓名 年龄 成绩\n");
	    scanf("%s%d%f",&s[i].name,&s[i].age,&s[i].score);
	    break;
	}
    }
    if(!found){
    	printf("查无此人!\n");
	return;
    }
    SaveStudents(path,s,n);
}
int main(){
    const char* data = "./student2.dat";
    Stu s[10];
    int n;
    if(Load(data,s,&n)){
    	printf("已经加载%d名学生信息\n",n);  
    }
    while(true){
    	printf("功能列表:\n");
		printf("1.查看所有学生信息\n");
		printf("2.录入学生信息\n");
		printf("3.按成绩排序\n");
		printf("4.查询学生信息\n");
		printf("5.删除学生信息\n");
		printf("6.修改学生信息 \n");
		printf("0.退出\n");
	int num;
	scanf("%d",&num);
	switch(num){
	    case 1: 
			ShowStudents(s,n);
			break;
 	    case 2:
	        Register(data,s,&n);
			break;
	    case 3:
			SortStudents(s,n);
	        break;
	    case 4:
			SearchStudents(s,n);
			break;
	    case 5:
			DeleteStudents(data,s,&n);
			break;
	    case 6:
			ModifyStudents(data,s,n);
			break;
	    case 0:
			return 0;
	}
    }
}

注:读取文件须为二进制文件.dat

1.5 文件定位:ftell()fseek()

  • 函数原型
// 获取位置
long ftell(FILE* stream);
// 设置位置
int fseek(FILE* stream,long offset,int whence);
  • 参数
stream 文件指针
offset 基于起始点的偏移量
whence 起始点

whence的集中状态及含义:

whence 数值 含义
SEEK_SET 0 从头开始
SEEK_CUR 1 从当前开始
SEEK_END 2 从结束开始
  • 返回值
    ftell()返回基于文件开头的偏移字节数。
  • 实例:计算文件大小
#include <stdio.h>
int main() {
    FILE* fp = fopen("hello.txt","r");
    if(fp) {
        fseek(fp,0,SEEK_END);//设置指针为最后位置,便宜0字节
        long size = ftell(fp); //ftell()返回基于文件开头的偏移字节数。
        printf("大小为%ldB\n",size);
    }
}

1.6 文件结尾判断feof()

  • 函数原型
int feof(FILE* stream);
  • 参数
    stream 文件指针
  • 返回值
    若指针指向文件结尾,返回一个真值,否则返回非真值。

1.7 返回开头rewind()

  • 函数原型
void rewind(FILE* stream);
  • 参数
    stream 文件指针
  • 实例
#include <stdio.h>
int main() {
    FILE* fp = fopen("hello.txt","r");
    fseek(fp,0,SEEK_END);
    long len = ftell(fp);
    printf("%d\n",len);
    rewind(fp);
    len = ftell(fp);
    printf("%d\n",len);
}
13
0

1.8 清空数据流

  • 函数原型
void fflush(FILE* stream);
  • 参数
    stream 文件指针
  • 举例
fflush(fp);        // 清空文件流
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一、C语言进阶:文件操作 的相关文章

  • 如何在 Vim 中突出显示 Bash 脚本?

    我的 Vim 编辑器自动突出显示 PHP 文件 vim file php HTML 文件 vim file html 等等 但是当我输入 vim file在里面写一个Bash脚本 它不会突出显示它 我如何告诉 Vim 将其突出显示为 Bas
  • 如何通过 makefile 在 Linux 上安装程序? [复制]

    这个问题在这里已经有答案了 可能的重复 Linux Unix make install 应该包含什么 https stackoverflow com questions 528399 what should linux unix make
  • 应用程序中两个不同版本的库

    考虑一个场景 其中有两个不同版本的共享库 考虑 A 1 so 链接到 B so A 2 so 链接到 C so 现在 B so 和 C so 都链接到 d exe 当 B so 想要调用 A 1 so 中的函数时 它最终会调用 A 2 so
  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • 使用 ioctl 在 C++ 中以编程方式添加路由

    我编写了简单的 C 函数 添加了新路线 void addRoute int fd socket PF INET SOCK DGRAM IPPROTO IP struct rtentry route memset route 0 sizeof
  • Docker忽略limits.conf(试图解决“打开文件太多”错误)

    我正在运行一个 Web 服务器 该服务器正在处理数千个并发 Web 套接字连接 为了实现这一点 在 Debian linux 我的基本镜像是 google debian wheezy 在 GCE 上运行 上 打开文件的默认数量设置为 100
  • bash while 循环的布尔表达式中的 -lt 意味着什么?

    我猜测它代表小于基于输出 但是我在哪里可以找到有关此语法的文档 bin bash COUNTER 0 while COUNTER lt 10 do echo The counter is COUNTER let COUNTER COUNTE
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了

随机推荐

  • Conda更新报错:requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://mirrors.tuna.t

    Conda更新报错 requests exceptions HTTPError 404 Client Error Not Found for url https mirrors tuna tsinghua edu cn anaconda p
  • “指定的文件名无效或太长” 无法拷贝,咋办

    话不多说 上图 移动硬盘中的数据 无法拷贝 无法删除 无法移动 无法改名 无法用RAR压缩 怎么办呢 我要拷出来用呢 这是因为 文件名中有冒号 冒号属于特殊字符 windows不认冒号 解决方法 不要在windows底下 拷贝了 找一个LI
  • 如何写出正确CUDA程序(持续更新中)

    本文不谈CUDA优化 只谈如何正确写出CUDA程序 先写对 再说优化 最近写CUDA程序也是断断续续的 经常程序写完了需要很长的时间调试 各种错误 调试的方法也是简单的printf 目前没找到更好的调试方法 如果有更好的办法的化希望告知 昨
  • python flask使用session.delete(result)删除数据库数据报错Class ‘builtins.list‘ is not mapped

    下面代码报错 results session query SchoolModel filter by exam id examId all session delete results session commit Class builti
  • SpringMVC框架(详解)

    目录 一 简介 1 1 什么是MVC 1 2 SpringMVC的优缺点 1 3 MVC模式 二 使用SpringMvc 21 创建maven web项目 修改webapp目录下WEB INF目录下的web xml文件 2 2 web xm
  • Elasticsearch专栏-5.es基本用法-分词查询

    es基本用法 分词查询 什么是分词 如何查看分词结果 分词涉及关键字说明 text和keyword match和term 举例说明 分词查询 match phrase 什么是分词 所谓分词 就是把一段语句 分割成一个个单词的过程 比如 71
  • 睿智的目标检测45——TF2搭建Faster R-CNN目标检测平台

    睿智的目标检测45 TF2搭建Faster R CNN目标检测平台 学习前言 什么是FasterRCNN目标检测算法 源码下载 Faster RCNN实现思路 一 预测部分 1 主干网络介绍 2 获得Proposal建议框 3 Propos
  • OpenSessionInViewFilter的作用及原理

    Hibernate 允许对关联对象 属性进行延迟加载 但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行 如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层 当 Web 层访问到那
  • JDK配置,切换

    目录 基础概念 windows 安装版 解压版 多个JDK切换 基础概念 JDK安装版会向注册表里面写入一些配置信息 添加环境变量信息 而解压版不会 需要自己配置环境变量 指向jdk的安装目录JAVA HOME JDK的安装路径 指定命令搜
  • 在openeuler22.03平台上基于atmoz/sftp容器运行老版本的openssh服务器

    在国产化openeuler22 03平台上容器化openssh默认为8 8p1 为进行安全加固 我们将其升级到了9 3了 但部分应用的sftp客户端版本老旧 无法连接到新版服务器 故本文尝试在国产开源操作系统搭建老版本的openssh服务器
  • 更新服务器列表不显示进度条,Ajax 请求服务器更新进度条

    Ajax Progress Bar var xmlHttp var key var bar color gray 进度条的颜色 var span id block var clear function createXMLHttpReques
  • 【C++】泛型编程

    为了让函数或者类有更好的复用性 C 引入了摸板的技术 让不同的数据类型 能使用到相同的函数或者类中去 这种编程的思想也叫做泛型编程 一 摸板 void Swap int left int right int temp left left r
  • Pandas系列学习(二):数据读取与输出

    平时工作中 主要会涉及到csv excel和sql等数据的导入与导出比较多 pandas库也内置了相应的函数进行处理读取与输出这些文件 首先 看看pd read csv 函数的语法格式如下 1 pd read csv pd read csv
  • ArcGIS:读取nc格式文件并导出为tif格式文件,降雨或温度NC等数据

    使用ArcGIS读取nc文件步骤 1 打开ArcGIS 在多维工具下选择 创建NetCDF栅格图层 2 输入nc文件 其他参数可忽略 点击确定 3 创建好后 右键点击图层 点击属性 选择 NetCDF 然后选择波段纬度 接着点击纬度对应的值
  • [XenServer] 修改默认安装XenServer系统盘(4G)大小

    安装XenServer系统盘默认大小为4G 安装前我们可以调整大小 注 此教程只适用于在全新安装XenServer的时候使用 已经安装过XenServer的无法修改系统盘 4G 大小 注 如果带数据重装 安装的时候一定要保证XenServe
  • day o1

    一java的发展史 1995年Sun公司发布Java1 0版本 1997年发布Java 1 1版本 1998年发布Java 1 2版本 2000年发布Java 1 3版本 2002年发布Java 1 4版本 2004年发布Java 1 5版
  • C2143 C4430 C2238错误

    原因是头文件互相包含了 错误1 error C2143 语法错误 缺少 在 lt 的前面 错误2 error C2238 意外的标记位于 之前 错误3 error C4430 缺少类型说明符 假定为int 注意 C 不支持默认int
  • SylixOS下定时器使用

    1 适用范围 本文档介绍SylixOS下实现定时器功能的方法 使用者应熟悉SylixOS以及SylixOS下的编程规范 2 实现方案 SylixOS提供标准定时器接口 用户可在应用层直接调用 下面列出定时器的创建 启动 停止以及删除等操作
  • VM关闭防火墙操作

    VM关闭防火墙操作 链接外网配置 setup 配置ip等 设置开启网卡 进入ifcfg eth0 vim etc sysconfig network scripts ifcfg eth0 修改 ONBOOT yes 重启网卡 service
  • 一、C语言进阶:文件操作

    1 文件操作 1 1 文件的输入输出 输出 使用printf 和命令行重定向 gt 实现文件输出 输入 使用scanf 和命令行重定向 lt 实现文件输入 include