转载 apue学习笔记1

1:流的定向决定了读取的是多字节还是单字节的流,当一个流最初被创建的时候,并没有被定向,若在一个未定向的流上使用一个多字节的IO函数,则将该流定向设置为宽定向的,反之在未定向的流上使用一个单字节的IO函数,则将该流的定向设置为字节定向的。

2:有两个函数可以改变流的定向,分别是freopen和fwide

3:int fwide(FILE *fp, int mode);
  若流是宽定向则返回正值,若流是字符定向则返回负值,未定向则返回0

4:mode:正:试图使指定的流是宽定向
       负:试图使指定的流是字节定向的
       0:不设置流的定向,但是返回标示该流的定向的值

5:fwide并不改变已经定向的流,且无错误返回状态,所以唯一可依靠的是在调用fwide之前先清除errno,从fwide返回前检查errno的值。

6:标准IO库提供缓冲的目的是尽可能减少read和write的次数,并对每个IO流自动进行缓冲管理,避免了应用程序需要考虑这一点所带来的麻烦。

7:三种缓冲策略:
  1:全缓冲,标准IO缓冲区满了之后才进行实际IO操作,对于驻留在磁盘上的文件都进行全缓冲操作,在一个流上第一次进行IO操作的时候,相关IO函数通常调用malloc来获取使用的缓冲区
   flush:在IO库方面,flush意味着将缓冲区的内容写到磁盘上,在终端驱动方面,则表示丢弃已存储在缓冲区中的数据。

  2:行缓冲:在输入和输出中遇到换行时标准IO库执行IO操作,只有在写了一行之后才进行实际的IO操作,当涉及到一个终端时(如标准输入输出),通常使用行缓冲
   有两点需要注意,标准IO库用来收集每一行的缓冲区的长度是固定的,所以只要填满了缓冲区,即使还没有换行,也要进行IO操作。

  3:不带缓冲,标准IO不对字符进行缓冲,例如标准IO函数fputs写15个字符到不带缓冲的流上,则该函数可能立刻调用write系统调用将字符写到关联的打开的文件上。
  标准错误流是不带缓冲的,可以允许错误信息立刻显式出来。

有以下标准可供参考:
  当且仅当输入和输出不涉及交互式设备的时候,他们才是全缓冲的。
  标准错误是不带缓冲的,若涉及到终端设备的其他流,则他们是行缓冲的,否则是全缓冲的。


8:更改缓冲类型函数族:
  void setbuf(FILE *restrict fp, char *restrict buf)
  int setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size)

   成功返回0
  对于函数setbuf,可以打开或者关闭缓冲机制,为了带缓冲进行IO,buf必须指向一个长度为BUFSIZ的缓冲区,通常定义在stdio.h中,通常在此之后该流就是全缓冲的,但若该流和一个终端设备相关,某些设备也可以将其设置为行缓冲,若关闭缓冲,只需将buf设置为NULL.
   对于setvbuf则可以更加精确的设置缓冲类型,是通过Mode参数来实现的,
                              _IOFBF
                              _IOLBF
                              _IONBF
   若指定一个不带缓冲的流,则忽略buf和size参数,若指定行缓冲或者全缓冲,则需给buf和size一个缓冲区和长度,如果流是带缓冲的,而buf是NULL,则标准IO将自动为该流分配适当的缓冲区,通常有BUFSIZ所指定的值。
   若缓冲区是在函数内部分配的自动变量,在函数返回前一定要关闭该流,实际缓冲区可存放的字节数是要少于size的,因为有一些管理信息在其中。

9:强制冲洗一个流:
  int fflush(FILE *fp);成功返回0,失败返回EOF,若fp是NULL,将导致所有的输出流被冲洗

10:打开流
  FILE *fopen(const char* restrict pathname, const char* restrict type);
  打开一个指定的文件
  FILE *freopen(const char* restrict pathname, const char* restrict type, FILE* restrict fp)
  在一个指定的流上打开一个指定的文件,若该流已经打开则先关闭该流,若该流已经定向,则清除该定向,一般用于将一个指定的文件打开为一个预定义的流:标准输入,标准输出或者标准出错
  FILE *fdopen(int filedes, const char *type)
  获取一个现有的文件描述符,并使一个标准IO流与该描述符相结合,通常用于创建管道和网络通信通道函数返回的描述符。因为这些特殊的类型文件不能用IO标准fopen函数打开,所以必须调用设备专用函数获得一个文件描述符,然后使用fdopen使一个标准IO流与该描述符关联。

11:关闭一个打开的流
   int fclose(FILE *fp)关闭之前先冲洗缓冲区中的数据,丢弃缓冲区中的任何输入,若标准IO已经为该流自动分配了一个缓冲区,则释放该缓冲区,当一个进程终止时,所有带未写缓冲数据的标准IO流都会被冲洗,所有打开的标准IO流都会关闭。

12:读写操作,
   1:每次一个字符的IO,一次读或写一个字符,若流是带缓冲的,则标准IO函数会处理所有缓冲
   2:每次一行的IO,若一次读写一行,则使用fgets和fputs,每行用一个换行终止,若调用fgets应该说明能处理的最大的行长
   3:直接IO,fread,fwrite.通常用于从二进制文件中每次读或者写一个结构。

13:一次读取一个字符的函数
   int getc(FILE *fp)
   int fgetc(FILE *fp)
   int getchar(void)

14:输出函数
   int putc(int c. FILE *fp)
   int fputc(int c,FILE *FP)
   int putchar(int c)

15:每一行的IO
   char *fgets(char *restrict buf, int n, FILE *restrict fp)
   char *gets(char *buf)
   gets从标准输入读,fgets从指定的流读。
  

16:二进制IO
   size_t fread(void *restrict ptr, size_t size, size_t nobj, FILE* restrict fp);
   size_t fwrite(const void *restrict ptr, size_t size, size_t nobj, FILE *restrict fp)
   
   EX:
     struct{
      short count;
   long total;
   char name[NAMESIZE];
  }item;
  
  if(fwrite(&item, sizeof(item),1,fp) != 1)
     err_sys(.......);
 返回读写的对象数。
  
17:对于读到出错或者文件尾端,则此数字可能少于nobj,此情况下可以用ferror或者feof来判断哪一种情况,对于写的话若返回值少于nobj则出错。

18:格式化流
   int fprintf(FILE *restrict fp, const char *restrict format, ......);
   
19:printf与scanf函数族

20:函数fileno,获取一个打开文件的文件描述符。
  

在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值