【操作系统---13】系统调用接口练习和动/静态库


系统调用接口练习:

代码实现:

#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/stat.h>
#include<string.h>
#include<error.h>

int main()
{
	    umask(0);
	    int fd=open("./iotest.txt",O_RDWR|O_CREAT|O_APPEND,0664);

	    if(fd<0)
	    {
			perror("open error");
			return ;
	    }

	    //ssize_t write(int fd, const void *buf, size_t count);
    
	    //要写入的数据
	    char* data="我最爱陆子涵!\n";

	    ssize_t a=write(fd,data,strlen(data));
	    
	    if(a<0)
	    {
			perror("write error");
			return ;
	    }

	    //ssize_t read(int fd, void *buf, size_t count);
    
	    //buf是被读取的数据要放入的地方
	    char buf[1024]={0};
	    a=read(fd,buf,1023);
	    if(a<0)
	    {
			perror("read erroe");
			return ;
	    }

	    printf("%s",buf);

	    close(fd);

	    return 0;
}

代码测试运行图:

第一条最开始没加\n
在这里插入图片描述
修改符号追加写入:
在这里插入图片描述
截断之前数据写入:
在这里插入图片描述


动态库与静态库:

库文件其实就是一大堆已经编译完成的代码文件,通过链接这个库,进而获取相应的函数实现


动态库生成:

			gcc --share	表示生成的动态库,不是可执行程序	

			gcc --share child1.c child2.c -o libmychild.so

			命名方式:	前缀lib+名字+后缀.so

			gcc -fPIC -c	生成目标代码时,产生位置无关码

动态库被加载到物理内存,映射到栈和堆之间的共享区,映射地址不固定


静态库生成:

			ar -cr libmychild.a child1.o child2.o	

			ar是静态库生成链接器 -c是创建静态库 -r是模块替换  后面紧跟库名称

库的使用:

gcc默认链接方式是动态库

1.生成可执行程序时—链接库文件的搜索路径 /lib64

<1>生成一个可执行程序时,若需要链接一个第三方库,需要将这个第三方库放置到指定路径下
/lib64 或/usr/lib64
<2>也可以使用export LIBRARY_PATH=. 环境变量的设置,来设置库的搜索路径
<3>gcc的-L选项 可以指定链接时的库的搜索路径,不可以指定加载的搜索路径,所以加载不了
-L之后和路径有空格

2.运行可执行程序时—加载动态库的搜索路径 /lib64

gcc -o main main.c -lcalculate -l+中间名称,不需要前缀和后缀

		ldd	查看当前程序依赖的库	LIBRARY_PATH	库的链接搜索路径	

		LD_LIBRARY_PATH		加载库的搜索路径

		<1>程序运行时,若程序时动态链接生成,运行时需要到指定的目录下加载动态库	

		/lib64 或/usr/lib64
		
		<2>也可使用export LD_LIBRARY_PATH=.	环境变量的设置,来声明程序运行时库的加载路径

代码实现:

编写4个不同的函数,生成.o文件,根据指令生成动态库和静态库

创建main函数进行测试:

#include "Add.h"
#include "Sub.h"
#include"Mul.h"
#include"Div.h"
#include<stdio.h>


int main()
{
	   printf("Add(1,2):%d \n",Add(1,2));
	   printf("Sub(5,2):%d \n",Sub(5,2));
	   printf("Div(4,2):%d \n",Div(4,2));
	   printf("Mul(2,4):%d \n",Mul(2,4));
}
代码测试运行图:

动态库测试:
在这里插入图片描述
静态库测试:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值