I/O编程

article/2025/9/22 7:46:13

一、标准IO

1.1、概述

标准IO

  • 是ANSI C提供的函数接口,在文件IO的基础上封装出来的。任何兼容标准C库的操作系统都可以使用接口,具有更好的移植性
  • 标准IO在执行时也会用到系统调用,为了增加内核的工作效率,减少资源浪费,在文件IO的基础上封装了缓冲区。

缓冲区

  1. 全缓冲:当缓冲区满或执行flush操作时才会进行磁盘操作;缓冲区满才进行实际的IO操作 4k
  2. 行缓冲:当在输入输出中遇到换行符时执行IO操作 1k
  3. 无缓冲:不对IO操作进行缓冲,在对流的读写时会立刻操作实际文件

流指针

  • 当用标准IO打开一个文件时,就会创建一个FILE结构体描述该文件;把这个FILE结构体称为流。
  • 标准IO操作文件返回的是文件流指针(FILE *)描述;文件IO打开后用文件描述符(fd)描述。

三种标准IO

标准输入流(键盘)0STDIN_FILENOstdin
标准输出流(显示器)1STDOUT_FILENOstdout
标准错误流2STDERR_FILENOstderr

1.2、标准IO编程

1.文件的打开

FILE *fopen (const char *path, const char *mode);

  • Path: 普通文件当前路径不需要加目录,其他要使用完整的路径
  • Mode:文件的打开模式
  • 返回值:成功时返回流指针,出错返回NULL,所以使用fopen函数必须判断是否为空

文件的打开模式

mode描述
“r” 或 “rb”以只读方式打开文件,文件必须存在。
“r+” 或 ”r+b”以读写方式打开文件,文件必须存在。
“w” 或 “wb”以只写方式打开文件,若文件存在则文件长度清为0。若文件不存在则创建。只写一次
“w+” 或 “w+b”以读写方式打开文件,其他同”w”。
“a” 或 “ab”以只写方式打开文件,若文件不存在则创建;向文件写入的数据被追加到文件末尾。
“a+” 或 “a+b”以读写方式打开文件。其他同”a”

2.文件的关闭

int flose(FILE *stream);

  • stream:以打开的流指针
  • 返回值:成功:0 失败:EOF
  1. 流关闭时自动刷新缓冲中的数据并释放缓冲区,比如:常规文件把缓冲区内容写入磁盘
  2. 当一个程序正常终止时,所有打开的流都会被关闭
  3. 流一旦关闭后就不能执行任何操作
  4. fclose()函数的入参stream必须保证为非空,否则出现断错误。不能关闭一个不存在的文件

3.错误处理

  • perror()
    void perror(const char *s);
    • s:在标准错误流上输出的信息
    • perror(“”);
  • strerror()
    • char *strerror(int errnum);
    • 参数:错误码
    • 返回值:错误码对应的错误信息
    • printf(“%s\n”, strerror(errno)) ;

示例

#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>                                                             int main(){FILE *fp;if((fp = fopen("./1.txt", "r")) == NULL){perror("fopen");printf("%s\n",strerror(errno));exit(1);}   fclose(fp);return 0;
}//运行结果
fopen: No such file or directory
No such file or directory

4.流的读写

4.1.按字符输入/输出

  • 按字符输入
    int fgetc(FILE *stream);
    int getc(FILE *stream); //宏
    int getchar(void); 只能读取键盘输入
    • stream:要输入的文件流
    • 返回值:成功:返回读取的字符 若到文件末尾或出错时返回EOF
  1. getchar() 等同与fgetc(stdin)
  2. getc和fgetc区别 一个是宏 一个是函数
  3. 函数返回值时int型不是char型,主要是为了扩展返回值的范围
  4. stdin也是FILE*的指针,是系统定义好的,指向的是标准输入(键盘输入)
  5. 打开文件后读取,是从文件开头开始读。读完一个后读写指针会后移。读写注意文件位置
  6. 调用getchar会造成阻塞,等待键盘输入
  • 按字符输出
    int fputc(int c, FILE *stream);
    int putc(int c, FILE *stream);
    int putchar(int c);
    • 成功时返回写入的字符;出错时返回EOF
    • putchar©等同于fputc(c, stdout)
    • 注意:返回和输入参数都是int类型

练习

#include <stdio.h>int main(){int c;while(1){c = fgetc(stdin);           //从键盘读取一个字符if(c >= '0' && c <= '9')    //输入的是数字,输出fputc(c, stdout);if(c == '\n')               //遇到换行符,跳出循环                      break;}   puts("");return 0;
}//运行结果
q2312fadsf
2312

4.2.按行输入/输出

  • 按行输入
    char *gets(char *s);(不推荐使用)
    char *fgets(char *s, int size, FILE *stream);(读的内容,读多少,从哪里读)
    • s:存放输入字符串的缓冲区首地址
    • size:输入的字符串长度
    • stream:对应的流
    • 返回值:成功返回s;失败或到文件末尾返回NULL
  1. gets函数已经被淘汰,因为会导致缓冲区溢出
  2. fgets函数第二个参数,输入的数据超出size,size-1的字符会保存到缓冲区,最后添加‘\0’,如果输入数据小于size-1,后边会添加换行符
  • 按行输出
    int puts(const char *s);
    int fputs(const char *s, FILE *stream);
    • s:存放输入字符串的缓冲区首地址
    • stream:对应的流
    • 成功时返回输出的字符个数;出错时返回EOF
  1. puts将缓冲区s中的字符串输出到stdout,并追加’\n’
  2. fputs将缓冲区s中的字符串输出到stream,不追加 ‘\n’

练习

//计算一个文本文件的行数                                                        
#include <stdio.h>
#include <string.h>int main(int argc, const char *argv[])
{int line = 0;char buf[128];FILE *fp;if(argc < 2) {printf("usage: %s<file>\n",argv[0]);return -1;}if((fp = fopen(argv[1], "r")) == NULL) {perror("fail to open");return -1;}while(fgets(buf, 128, fp) != NULL) {if(buf[strlen(buf)-1] == '\n')line++;}printf("the line of %s is %d\n", argv[1], line);return 0;
}

4.3.按指定对象大小输入/输出

size_t fread(void *ptr, size_t size, size_t n, FILE *fp);

  • void *ptr 读的内容放的位置指针,
  • size_t size 读取得块大小
  • size_t n读取的个数,
  • FILE *fp 读取的文件指针

size_t fwrite(const void *ptr, size_t size, size_t n, FILE *fp);(将const void *ptr写入FILE *fp)

  • const void *ptr 写的文件内容的位置指针,
  • size_t size 写的块大小
  • size_t n 写的的个数
  • FILE *fp 要写文件指针
  • 成功返回读写的对象个数;出错时返回EOF
  • 既可以读写文本文件,也可以读写数据文件
  • 效率高

文件写完之后,文件指针指向文件末尾,如果这时候读,读不出内容;
解决方法:移动指针;关闭文件,重新打开

5.流的刷新和定位

5.1.刷新流

int fflush(FILE *fp);

  • 成功时返回0;出错时返回EOF
  • 将流缓冲区中的数据写入实际的文件
  • Linux下只能刷新输出缓冲区,输入缓冲区丢弃
  • 如果输出到屏幕使用fflush(stdout)

5.2.定位流

long ftell(FILE stream);

  • ftell() 成功时返回流的当前读写位置,出错时返回EOF

long fseek(FILE stream, long offset, int whence);

  • fseek()定位一个流,成功时返回0,出错时返回EOF
  • whence参数:SEEK_SET/SEEK_CUR/SEEK_END
    • SEEK_SET:从距文件开头offset位移量为新的读写位置;
    • SEEK_CUR:以目前读写位置往后增加offset个位移量;
    • SEEK_END:将读写位置指向文件尾后再增加offset个位移量
  • offset参数:偏移量,可正可负
  • 打开 a 模式,fseek无效

void rewind(FILE stream);

  • rewind(fp)相当于fseek(fp,0,SEEK_SET);
  • rewind()将流定位到文件开始位置
  • 读写流时,当前读写位置自动后移

这三个函数只适用于2G以下文件

获取文件大小

#include <stdio.h>int main(int argc, const char *argv[])
{FILE *fp;if(argc < 2) {printf("usage: %s<file>\n",argv[0]);return -1; }   if((fp = fopen(argv[1], "r")) == NULL) {perror("fail to open");return -1; }   fseek(fp, 0, SEEK_END);printf("the size of %s is %ld\n", argv[1], ftell(fp));                           return 0;
}

6.格式化输入输出

printf系列
int printf(const char *format, …);
int fprintf(FILE *stream, const char *format, …);
int sprintf(char *str, const char *format, …);

  • 功能:printf()系列中的函数根据如下所述的格式产生输出:

    • printf()将输出默认写入标准输出流stdout(终端文件);
    • fprintf()将输出写入给定的输出流对应的文件中;
    • sprintf()将输出写入字符串str
  • 参数:

    • printf():

      • 参数1—const char * format一个字符串首地址。表示格式化字符串的地址
      • 参数…—可以有多个参数,根据格式化字符串来决定,表示要输出的数据(可以是变量名、常量、表达式)
    • fprintf():

      • 参数1—FILE * stream一个文件流指针。表示需要输出到的文件的信息结构体地址(输出到哪个文件中)]
      • 参数2—const char * format一个字符串首地址。表示格式化字符串的地址
      • 参数…—可以有多个参数,根据格式化字符串来决定,表示要输出的数据(可以是变量名、常量、表达式)
  • 返回值:int类型
    输出成功—返回打输出的字符数(不包括用于结束字符串输出的空字节)。
    输出失败—返回EOF,并设置errno来指示错误. #define EOF -1

  • 几个函数的特点:
    fprintf()可以向指定文件写入数据,包括终端标准输出(stdout)
    printf()默认只能给终端文件(stdout)写数据.stdout是行缓存

scanf系列

int scanf(const char *format, …);
int fscanf(FILE *stream, const char *format, …);
int sscanf(const char *str, const char *format, …);

  • 功能:格式化扫描输入

    • scanf()默认从终端标准输入(stdin)中格式化读取数据输入到程序中
    • fscanf()从文件流指针所指向的文件中格式化读取数据输入到程序中
    • sscanf()从字符串中格式化读取数据输入到程序中
  • 参数:
    scanf():

    • 参数1—const char * format一个字符串首地址。表示格式化字符串的地址
    • 参数…—可以有多个参数,根据格式化字符串来决定,表示将格式化读取的数据输入到程序中的地址。(程序中变量的地址)

    fscan():

    • 参数1—FILE * stream一个文件流指针。表示需要读取的文件的信息结构体地址(读取哪个文件)
    • 参数2—const char * format一个字符串首地址。表示格式化字符串的地址
    • 参数…—可以有多个参数,根据格式化字符串来决定,表示要格式化读取的数据要输入到程序中的地址(程序中变量的地址)
  • 返回值:int类型
    如果成功,这些函数返回成功匹配和分配的输入数据的数量
    如果失败:返回EOF。以下是错误的类型:
    1.成功匹配完之前只要有一处与格式化字符串不匹配的地方,则返回值EOF。
    2.如果发生读取错误,也会返回EOF

  • 特点:
    scanf函数系列遇到换行符’\n’和空格符’ '都会停止匹配。

7.练习

1.在程序中分别打开源文件和目标文件,循环从源文件中读取内容并写入目标文件。

#include <stdio.h>                                                              
#include <string.h>
#include <errno.h>#define N 128int main(int argc, const char *argv[])
{int n;int buf[N];FILE *fps, *fpd;if(argc < 3){printf("Usage:%s <src_file> <dst_file>\n",argv[0]);return -1;}//打开源文件fps = fopen(argv[1], "r");if(fps == NULL){fprintf(stderr, "fail to fopen %s: %s\n", argv[1], strerror(errno));return -1;}//打开目标文件fpd = fopen(argv[2], "w");if(fpd == NULL){fprintf(stderr, "fail to fopen %s: %s\n", argv[2], strerror(errno));return -1;}//循环读写文件n = fread(buf, 1, N, fps);if(n != EOF)fwrite(buf, 1, n, fpd);//关闭文件fclose(fps);fclose(fpd);return 0;
}

2.获取系统时间并保存到文件

  • time()用来获取系统时间(秒数)
    time_t time(time_t *seconds) 1970.1.1 0:0:0
  • localtime()将系统时间转换成本地时间
struct tm *localtime(const time_t *timer)
struct tm {int tm_sec;         /* 秒,范围从 0 到 59 */int tm_min;         /* 分,范围从 0 到 59 */int tm_hour;        /* 小时,范围从 0 到 23 */int tm_mday;        /* 一月中的第几天,范围从 1 到 31*/int tm_mon;         /* 月份,范围从 0 到 11 */int tm_year;        /* 自 1900 起的年数*/int tm_wday;        /* 一周中的第几天,范围从 0 到 6 */int tm_yday;        /* 一年中的第几天,范围从 0 到 365 */int tm_isdst;       /* 夏令时 */    
};
注意:int tm_mon;        获取的值要加1是正确的月份int tm_year;        获取的值加1900是正确的年份
  • 获取文件内的所有行数量:
   while(fgets(buf,32,fp)!=NULL){ if(buf[strlen(buf)-1] =='\n'){  //注意判断是否是一行结束linecount++;}}

写完文件记得fflush ,写到磁盘里面去。
标准IO磁盘文件的缓冲区一般为4096
注意和标准输出的全缓冲区别,标准输出是1024

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <time.h>int main(int argc, const char *argv[])
{FILE *fp;time_t ctime;struct tm *ctimestr;int linecount = 0;char buf[32] = {0};fp = fopen("time.txt", "a+");if(fp == NULL){perror("fopen");return -1;}while(fgets(buf, 32, fp) != NULL){if(buf[strlen(buf) - 1] == '\n')linecount++;}                                                                           while(1){ctime = time(NULL);ctimestr = localtime(&ctime);fprintf(fp, "%d: %04d-%02d-%-2d %02d:%02d:%02d\n",linecount,ctimestr->tm_year+1900, ctimestr->tm_mon+1, ctimestr->tm_mday,ctimestr->tm_hour, ctimestr->tm_min, ctimestr->tm_sec);fflush(fp);linecount++;sleep(1);}fclose(fp);return 0;
}
./time
time.txt:
0: 2022-08-20 09:24:25                                                          
1: 2022-08-20 09:24:26
2: 2022-08-20 09:24:27
3: 2022-08-20 09:24:28
4: 2022-08-20 09:24:29
5: 2022-08-20 09:24:30
6: 2022-08-20 09:24:31
7: 2022-08-20 09:24:32                         

二、文件IO

2.1.概述

文件IO,又称系统IO,系统调用。是操作系统提供的API接口函数
POSIX(可移植操作系统接口)定义的一组函数
文件IO不提供缓冲机制
标准IO和文件IO不能混用

功能标准IO文件IO(低级)
打开fopen、freopen、fdopenopen
关闭fcloseclose
getc,fgetc,getchar,fgets,gets,freadread
putc,fputc,putchar,fputs,puts,fwritewrite

文件描述符

  • 每个打开的文件都对应着一个文件描述符
  • 文件描述符是一个非负整数,linux为每一个打开的文件分配一个文件描述符
  • 文件描述符从0开始分配,依次递增
  • 文件IO操作通过文件描述符来完成
  • fd(fail descriptor)
  • 0-1023,表示文件
  • 0,1,2的含义 标准输入、标准数出、标准错误

2.2.文件IO编程

1.文件IO的打开

#include <fcntl.h>
int open(const char *pathname, int flags); 不创建文件
int open(const char *pathname, int flags, mode_t mode); 创建文件,不能创建设备文件

  • 成功时返回文件描述符;
  • 出错时返回EOF
  • 打开文件时使用两个参数
  • 创建文件时使用三个参数,指定新文件的权限
  • 只能打开设备文件

在这里插入图片描述

mode权限描述
S_IRWXU00700用户(文件所有者)具有读、写和执行权限
S_IRUSR00400用户具有读权限
S_IWUSR00200用户具有写权限
S_IXUSR00100用户具有执行权限
S_IRWXG00070同组用户具有读、写和执行权限
S_IRGRP00040同组用户具有读权限
S_IWGRP00020同组用户具有写权限
S_IXGRP00010同组用户具有执行权限
S_IRWXO00007其他用户具有读、写和执行权限
S_IROTH00004其他用户具有读权限
S_IWOTH00002其他用户有写权限
S_IXOTH00001其他用户有执行权限

文件IO和标准IO的模式对应关系
在这里插入图片描述
0664—普通用户权限

2.文件IO的关闭

#include <unistd.h>
int close(int fd);

成功时返回0;出错时返回EOF
程序结束时自动关闭所有打开的文件
文件关闭后,文件描述符不再代表文件

3.文件IO的读写

read函数用来从文件中读取数据
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);

成功时返回实际读取的字节数;出错时返回EOF
读到文件末尾时返回0
buf是接收数据的缓冲区
count不应超过buf大小

write函数用来向文件写入数据:
#include <unistd.h>
ssize_t write(int fd, void *buf, size_t count);

成功时返回实际写入的字节数;出错时返回EOF
buf是发送数据的缓冲区
count不应超过buf大小

4.文件IO的定位

lseek函数用来定位文件:
#include <unistd.h>
off_t lseek(int fd, off_t offset, intt whence);

  • 成功时返回当前的文件读写位置;出错时返回EOF
  • whence参数:SEEK_SET/SEEK_CUR/SEEK_END
    • SEEK_SET:从距文件开头offset位移量为新的读写位置;
    • SEEK_CUR:以目前读写位置往后增加offset个位移量;
    • SEEK_END:将读写位置指向文件尾后再增加offset个位移量
  • offset参数:偏移量,可正可负

示例

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>int main(int argc, const char *argv[])
{int fd, ret;char buf[32] = "hello world";char buf2[32] = {0};fd = open("test.txt", O_RDWR | O_CREAT|O_APPEND, 0666);                                                       if(fd < 0) {perror("file to open");return 0;}   printf("success,fd = %d\n", fd);ret = write(fd, buf, strlen(buf));if(ret < 0) {perror("fail to write");return 0;}   printf("write count = %d\n", ret);lseek(fd, 0, SEEK_SET);ret = read(fd, buf2, 32);if(ret < 0) {perror("read");return 0;}   buf2[31] = 0;printf("read buf2 = %s\n", buf2);return 0;
}
//运行结果
linux@linux:~/Desktop/fileIO$ ./a.out
success,fd = 3
write count = 11
read buf2 = hello world
linux@linux:~/Desktop/fileIO$ cat test.txt 
hello world

5.访问目录

opendir函数用来打开一个目录文件:
#include <dirent.h>
DIR *opendir(const char *name);
DIR *fdopendir(int fd); 使用文件描述符,要配合open函数使用、

DIR是用来描述一个打开的目录文件的结构体类型
成功时返回目录流指针;出错时返回NULL

readdir函数用来读取目录流中的内容:
#include <dirent.h>
struct dirent *readdir(DIR *dirp);

struct dirent是用来描述目录流中一个目录项的结构体类型
成功时返回目录流dirp中下一个目录项;
出错或到末尾时时返回NULL
示例

#include <dirent.h>
#include <stdio.h>int main(int argc, const char *argv[])
{DIR *dp;struct dirent *dt;dp = opendir("/home/linux/Desktop");                                             if(dp < 0) {perror("fail to opendir");return -1; }   while((dt = readdir(dp)) != NULL) {printf("%s\n", dt->d_name);}   closedir(dp);return 0;
}

6.修改文件访问权限

chmod/fchmod函数用来修改文件的访问权限:
#include <sys/stat.h>
int chmod(const char *path, mode_t mode);
int fchmod(int fd, mode_t mode);

成功时返回0;出错时返回EOF
root和文件所有者能修改文件的访问权限
示例: chmod(“test.txt”, 0666);

7.获取文件属性

#include <sys/stat.h>
int stat(const char *path, struct stat *buf); 提供文件名字,获取文件对应属性
int lstat(const char *path, struct stat *buf); 获取的是链接文件的属性
int fstat(int fd, struct stat *buf); 通过文件描述符获取文件对应的属性
成功时返回0;出错时返回EOF
函数都是获取文件(普通文件,目录,管道,socket,字符,块()的属性

struct stat是存放文件属性的结构体类型:mode_t  st_mode;类型和访问权限uid_t  st_uid;所有者iduid_t  st_gid;用户组idoff_t  st_size;文件大小time_t  st_mtime;  最后修改时间- stat结构体struct stat {dev_t         st_dev;       //文件的设备编号ino_t         st_ino;       //节点mode_t        st_mode;      //文件的类型和存取的权限nlink_t       st_nlink;     //连到该文件的硬连接数目,刚建立的文件值为1uid_t         st_uid;       //用户IDgid_t         st_gid;       //组IDdev_t         st_rdev;      //(设备类型)若此文件为设备文件,则为其设备编号off_t         st_size;      //文件字节数(文件大小)unsigned long st_blksize;   //块大小(文件系统的I/O 缓冲区大小)unsigned long st_blocks;    //块数time_t        st_atime;     //最后一次访问时间time_t        st_mtime;     //最后一次修改时间time_t        st_ctime;     //最后一次改变时间(指属性)
};- 文件类型ST_mode通过系统提供的宏来判断文件类型:
S_IFMT                     0170000    文件类型的位遮罩
S_ISREG(st_mode)           0100000    是否常规文件
S_ISDIR(st_mode)           0040000    是否目录
S_ISCHR(st_mode)           0020000    是否字符设备
S_ISBLK(st_mode)           0060000    是否块设备
S_ISFIFO(st_mode)          0010000    是否FIFO文件
S_ISLNK(st_mode)           0120000    是否链接文件
S_ISSOCK(st_mode)          0140000    是否SOCKET文件- 文件访问权限ST_mode通过系统提供的宏来获取文件访问权限:               
S_IRUSR           00400                   bit:8    所有者有读权限
S_IWUSR          00200                        7    所有者拥有写权限
S_IXUSR           00100                       6    所有者拥有执行权限
S_IRGRP           00040                       5   群组拥有读权限
S_IWGRP          00020                        4   群组拥有写权限
S_IXGRP           00010                       3   群组拥有执行权限
S_IROTH           00004                       2   其他用户拥有读权限
S_IWOTH          00002                        1   其他用户拥有写权限
S_IXOTH           00001                       0   其他用户拥有执行权限

示例

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>int main (int argc,char **argv){struct stat buf;int ret;ret = stat("chmod_t.c",&buf);if(ret<0){perror("stat");return 0;}if(S_ISREG(buf.st_mode)){printf("-");}if(S_ISDIR(buf.st_mode)){printf("d");}if(S_ISCHR(buf.st_mode)){printf("c");}if(S_ISBLK(buf.st_mode)){printf("b");}if(S_ISFIFO(buf.st_mode)){printf("p");}if(S_ISSOCK(buf.st_mode)){printf("s");}//   printf(" ");int i;for(i=8;i>=0;i--){if(buf.st_mode & (1<<i)){switch(i%3){case 2:printf("r");break;case 1:printf("w");break;case 0:printf("x");break;}}else{printf("-");}}printf(" %d",(int)buf.st_size);struct tm *t;t = localtime(&buf.st_ctime);printf(" %d-%d-%d %d:%d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min);printf(" chmod_t.c\n");  
}
//运行结果
linux@linux:~/Desktop/fileIO$ gcc stat.c 
linux@linux:~/Desktop/fileIO$ ./a.out
_ rw-rw-r-- 185 2022 8 16 13:15 chmod.c
linux@linux:~/Desktop/fileIO$ ls -l chmod.c 
-rw-rw-r-- 1 linux linux 185 Aug 16 13:15 chmod.c
linux@linux:~/Desktop/fileIO$ 

http://chatgpt.dhexx.cn/article/ce6rchgv.shtml

相关文章

小米平板2装win10(附驱动)

前段时间在折腾着怎么给米pad2装win10&#xff0c;结果驱动什么的折腾了好久。 给米pad2装win10&#xff0c;其实就和给普通的电脑装win10差不多的步骤。 第一步&#xff0c;制作U盘启动器。工具什么的就用官方的winPE就好&#xff0c;iso就随意吧。 第二步&#xff0c;给米…

小米笔记本系统win10家庭版升级为企业版(专业版)

一.背景 新入职一家IT公司,由于公司领导层是小米粉,基本新入职的员工人手一本小米笔记本.小米笔记本默认自带的是家庭版的,由于之前公司很多人用的都是家庭版的,在某些极为特殊的软件开发情况下,家庭版的配置给开发带来了极大的困难,后来经过查资料验证企业版是不会出现这种情…

小米mix2s刷win11和android双系统

在给电脑安装系统的过程中&#xff0c;可能会因为各种原因出现windows无法安装的情况&#xff0c;我在给小米mix2s安装win11时发现出现了“计算机意外地重新启动或遇到错误&#xff0c;windows无法安装”的情况&#xff0c;下面就来教一下大家两种解决方法&#xff0c;希望可以…

小米air13.3一代的win10系统重装

仅作为记录&#xff0c;大佬请跳过 小米air的系统重装在进入bios之后&#xff0c;选择u盘启动时&#xff08;需要设置一个密码&#xff0c;然后关闭secure boot&#xff09;有点跟神船不一样&#xff0c;作为记录。 参考大佬博主文章传送门

Win10 IPv6 远程桌面连接(小米路由器)

前排广告&#xff1a;2021金三银四&#xff0c;字节跳动招人季&#xff0c;平均反馈时间仅1天&#xff01;选择覆盖达6大城市&#xff01;——2021年字节跳动飞书团队内推活动正式开启&#xff0c;岗位列表见&#xff1a;https://job.toutiao.com/s/eNtDcGu。除了这个投递连接外…

小米4A千兆刷OpenWrt_Win10

在Linux上试了一下&#xff0c;最终telnet 196.168.31.1失败&#xff0c;网上找了一些教程&#xff0c;改到win10下刷成功了。 1 先安装Pthon3 和pip3&#xff0c;然后pip3 install requests&#xff0c;不然会报错 2 win10开启telnet&#xff0c;方法简单自行百度&#xff1…

小米平板2可以装鸿蒙系统,详细教程!教你小米平板2轻松刷Win10

众所周知&#xff0c;小米平板2拥有MIUI和Windows 10两个版本&#xff0c;这两个版本在硬件上是一致的(除了机身存储空间不同)&#xff0c;所以理论上存在通刷的可能。 现在&#xff0c;有网友在MIUI论坛中共享了小米平板2刷Windows 10的教程&#xff0c;有兴趣的不妨一起来看看…

win10 下载

win10 下载 https://www.microsoft.com/zh-cn/software-download/windows10 Windows 10 2022 更新 l 版本 22H2 选择版本 以下 Windows 10 版本对于 Windows 10 家庭版和 Windows 10 专业版都有效。 如果您想验证下载数据的完整性和真实性&#xff0c;请按照以下步骤操作&…

计算机连接小米usb驱动,win10系统安装小米usb驱动的详细步骤

随着电脑的使用率越来越高&#xff0c;我们有时候可能会遇到对win10系统安装小米usb驱动进行设置&#xff0c;如果我们需要对win7系统安装小米usb驱动进行设置时&#xff0c;要怎么处理win10系统安装小米usb驱动的设置方法非常简单。 设置方法&#xff1a; 1、首先先下载小米驱…

win10 android 手机驱动下载,小米手机驱动win10驱动

小米手机usb驱动win10驱动是Win10系统专用的小米手机USB连接驱动&#xff0c;Win10电脑想要通过USB数据线与小米手机连接&#xff0c;必需安装这个驱动&#xff0c;从而可以使用电脑管理手机中的文件&#xff0c;以及进行线刷、解锁等操作&#xff0c;支持32位以及64位的Win10系…

【日常技巧】小米手机投屏至win10笔记本

最近需要多次实现自己手机与电脑的投屏&#xff0c;却又不想安装其他第三方软件&#xff0c;最终找到方法&#xff0c;做以下记录。 系统说明 手机&#xff1a;MIUI12.0.2稳定版 电脑&#xff1a;win10 前提条件 手机与电脑同处于同一wifi下 操作步骤 1.打开win10电脑投屏…

小米笔记本怎么恢复出厂的系统

买了台小米pro笔记本,中途自己重装了一次win10专业版,自己安装系统之后,自然很多电脑自带的软件和功能就没有了,比如Dolby,指纹解锁,正版的win10和office. 之前一直以为小米笔记本里面的软件都是预装在win10里面,只要有原厂的镜像就可以安装了,但是一直没找到.最近刚好系统又出…

小米笔记本pro15.6黑苹果+win10双系统/多系统

基本信息 配置,小米笔记本PRO 15.6 硬盘&#xff1a;杂牌 显卡&#xff1a;MX150/H610 CPU:i7-8550 简介&#xff1a;win10苹果双系统&#xff0c;双硬盘双系统&#xff0c;自带的pm981硬盘以前成功装过一次&#xff0c; 目前已知&#xff1a; MAC时间不同步&#xff08;…

小米pro安装win10系统

一.利用U盘做驱动盘 格式化u盘为NTFS格式官网下载https://www.microsoft.com/zh-cn/software-download/windows10点击立即下载工具 下载完成双击打开--->接受---->下一步---->为另一台电脑创建安装介质---->下一步--->下一步---->下一步---->出现所选U盘…

win10系统小米妙享中心,在手机可搜索到电脑,与之跨屏协作

在体验了小米妙享中心之后&#xff0c;发现非小米笔记本每次投屏不能直接在手机上直接投送到电脑屏幕&#xff0c;而只能在电脑打开手机画面&#xff0c;进行对手机操作&#xff0c;我们进行电脑伪装将我们的电脑变成小米笔记本&#xff0c;之后就可以在小米妙享中心发现我的设…

小米笔记本重装win10系统教程

U盘装机大师一键重装小米笔记本win10系统 小米笔记本自打推出以来&#xff0c;一直以非常高的性价比而深受大众的喜爱&#xff0c;加上其简约的外观&#xff0c;无论是价格还是外型都给了用户购买它的理由&#xff0c;对于电脑的话&#xff0c;重装系统是不可避免的事&#xf…

小米笔记本安装Win 10历程

今天要给小米笔记本&#xff08;128G 固态硬盘&#xff09;重新安装Win 10系统&#xff0c;本想着通过自带的恢复方式进行恢复 但是&#xff0c;通过此种方法进行还原后&#xff0c;电脑的 “设置” 点击不了了。无奈之下&#xff0c;只能通过U盘重新安装系统。 1. 通过U盘做系…

pc端和移动端自适应, 做响应式网页

一套代码能够兼容适配不同的屏幕设备&#xff0c;内容不变布局效果变了&#xff0c;这样的网页就是响应式网页 响应式和自适应的区别&#xff1a; 响应式是一套代码通过检测视口分辨率展示不同的页面布局效果样式&#xff0c;是指据屏幕的大小自动的调整页面的展现方式&#…

vue同一项目搭建PC端和移动端

新建一个vue项目 我们执行npm run serve 启动项目&#xff0c;在浏览器输入&#xff1a;“localhost:8080”&#xff1b;正常的话然后我们会看到项目的启动页 2.把目录结构改为下图所示 3.更改路由(router)的文件 核心代码 import Vue from ‘vue’ import VueRouter from ‘…

嵌入式软件开发学习路线

查阅了很多资料&#xff0c;浏览很多网站&#xff0c;总结一下嵌入式学习路线。 前期补习阶段&#xff1a; C语言基础补习课程 C语言是一门通用计算机编程语言&#xff0c;广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器…