fwirte和fread函数

都是全缓存函数
fread和fwrite函数
size_t fread(void *ptr,size_t size, size_ number,FILE *stream);
size_t fwrite(const void *ptr,size_t size, size_ number,FILE stream);
功能:全缓存的读写函数
第一个参数 buf:写的内容
第四个参数 fp:写到哪里去
第二个参数 size:写的内容中,每一个单元所占的字节数
第三个参数 nmemb:写的内容中,有多少个单元数
总共写多少个字节,size
nmemb
返回值:实际写的单元数。

fwrite和fread实现

在这里插入图片描述
在这里插入图片描述

效率对比fgetc——read
在这里插入图片描述
fgetc和fgers效率对比
在这里插入图片描述
在这里插入图片描述
同样拷贝文件之下fread的效率较高
fread、fwrite > fgets 、fputs > fgetc 、fputc > read、wirte

制作静态库和动态库
1、静态库,libxxx.a,在编译时就将库编译进可执行程序中。
优点:程序的运行环境中不需要外部的函数库。
缺点:可执行程序大,可执行文件大
2、动态库,又称共享库,libxxx.so,在运行时将库加载到可执行程序中。
优点:可执行程序小,可执行文件大
缺点:程序的运行环境中必须提供相应的库。

静态库是在.c文件gcc时将.a文件一起加进来编译,是在编译阶段
动态库是.c文件gcc时不调用,而是在运行时./a.out的时候才调用,是在运行阶段

函数库目录:/lib /usr/lib。

静态库:.c文件gcc-o生成.o文件再通过ar命令生成.a文件
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
比如写两个函数,先编译库函数生成.o文件再通过ar -cr 命令生成静态库,最后在主函数调用时在链接它的静态库

同理编写动态库

动态函数库的制作:

  1. 生成目标文件:gcc -c file.c
  2. gcc -shared -fpic -o libfile.so file.o
    -fpic:产生位置无关代码。
    -shared:生成共享库。
    用上述命令生成libaddsub.so 动态函数库。
    gcc -o out main.c -L. -lfile
    此时还不能立即./out,因为在动态函数库使用时,会查找/usr/lib /lib目录下的动态函数库,而此时我们生成的库不在里边。
    第一种方法:
    libaddsub.so放到/usr/lib 或/lib中去。
    第二种方法,假设libfile.so在/home/linux/file 环境变量方法
    export LD_LIBRARY_PATH=/home/linux/addsub:$LD_LIBRARY_PATH
    第三种方法:
    在/etc/ld.so.conf文件里加入我们生成的库的目录,然后/sbin/ldconfig。
    /etc/ld.so.conf是非常重要的一个目录,里面存放的是链接器和加载器搜索共享库时要检查的目录,默认是从/usr/lib /lib中读取的,所以想要顺利运行,可以把我们库的目录加入到这个文件中并执行/sbin/ldconfig。
    在这里我们用第一种方法

在这里插入图片描述
也是s1.c和sub.c函数,通过gcc -shared -fpic命令编译成.so文件 再调用链接库,再运行发现运行不了,是因为没有调用库,所以要将编译的动态库添加到库目录中,通过mv命令将.so 文件移动到库目录中,最后才能运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值