粉丝提问|c语言:如何定义一个和库函数名一样的函数,并在函数中调用该库函数_c语言中实现系统调用一样的函数名-程序员宅基地

技术标签: static  c语言  函数重写  粉丝问答  

  1. 粉丝提问|c语言:如何定义一个和库函数名一样的函数,并在函数中调用该库函数
  2. 一个端口号可以同时被两个进程绑定吗?
  3. 两个线程,两个互斥锁,怎么形成一个死循环?
  4. 一个例子让你看清线程调度的随机性

问题描述:

某个函数fun_1()是在lib内,没法修改的,在程序中大量的使用了该函数,现在想把原本fun_1失效(现在失效的方法是#define fun_1(…)),用另外一个函数fun_2(),可是fun_2最后也需要调用fun_1,上面的失效方法感觉就不行了,请问怎么做才对?

粉丝提问
我把问题简单整理下:
问题

  1. 我们库文件里有个函数是read()
  2. 我们现在要自己定义一个名字一样的函数read(),
  3. main()函数首先调用我们自己定义的函数read()
  4. 自己定义的函数,要再定义库文件中的read()函数。

粉丝提问,必须安排!一口君实力宠粉!

想学习C语言、Linux、驱动、ARM的同学可以加一口君好友。

解决思路-static

如果我们要使用一个和库函数相同名字的函数,就要借助static关键字。

在函数的返回类型前加上static,就是静态函数。其特性如下:

  1. 静态函数只能在声明它的文件中可见,其他文件不能引用该函数
  2. 不同的文件可以使用相同名字的静态函数,互不影响
  3. 其他库如果有相同的函数名,优先使用本文件的静态函数

举例

系统调用函数read(),定义如下:

read现在我们想定义一个自己的函数,名字也是read,要如何操作呢?

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

static void read()
{
    
	printf("my read func()\n");
} 
int main()
{
    
	read();
}

执行结果

我们可以看到,虽然我们添加了系统调用read()的头文件,但是调用的是我们自己定义的read()函数。

下面我们来看下,如果我们定义的read函数又想调用系统调用read()函数应该怎么办呢?
那就必须再增加一个文件,把相关功能放到另外一个文件中,在同一个文件中是没有办法实现的。

上代码,不上代码,没有论据的知识点都是耍流氓。一口君绝大部分文章都是有实例代码支撑,

//test.c
  1 #include <stdio.h>                                                                                                     
  2 #include <sys/types.h>
  3 #include <sys/stat.h>
  4 #include <fcntl.h>
  5 
  6 
  7 void test()
  8 {
    
  9     int fd;
 10     char buf[128]={
    0};
 11 
 12     fd = open("123.c",O_RDWR);
 13     if(fd<0)
 14     {
    
 15         perror("open fail\n");
 16         return;
 17     }
 18     read(fd,buf,16);
 19     printf("enter test():%s\n",buf);
 20 }
//123.c
  1 #include <stdio.h>                                                                                                     
  2 #include <sys/types.h>
  3 #include <sys/stat.h>
  4 #include <fcntl.h>
  5 
  6 extern void test();
  7 static void read()
  8 {
    
  9     printf("my read func()\n");
 10     test();
 11 }
 12 int main()
 13 {
    
 14     read();
 15 }

执行结果
执行结果由执行结果可知,程序既调用到了我们自己调用的read()函数,也调用到了系统调用函数read().

函数调用关系如下:
调用顺序

更多嵌入式Linux 入门的知识 ,请关注 一口Linux

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/daocaokafei/article/details/109686092

智能推荐

npm包安装/升级,npm i --save和--save-dev区别,dependencies和devDependencies区别,package.json文件中版本号含义_npm 升级 devdependencies-程序员宅基地

文章浏览阅读1.5k次。npm包安装/升级,npm i --save和–save-dev区别,dependencies和devDependencies区别,package.json文件中版本号含义目录npm包安装/升级,npm i --save和--save-dev区别,dependencies和devDependencies区别,package.json文件中版本号含义npm包安装/升级package.json中安装依赖分类npm i --save和 npm i --save-dev区别package.json 文件中版本号含_npm 升级 devdependencies

TypeScript tsc 不是内部或外部命令,也不是可运行的程序或批处理文件解决办法_get-executionpolicy' 不是内部或外部命令,也不是可运行的程序 或批处理文件。-程序员宅基地

文章浏览阅读531次。TypeScript tsc 不是内部或外部命令,也不是可运行的程序或批处理文件解决办法_get-executionpolicy' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

摆脱焦虑的方法_把自己情绪不当回事,情绪是假的,情绪容易形成回路,就是佛教的妄念,当妄念一旦-程序员宅基地

文章浏览阅读207次。 断除烦恼的方法,要让自己的情绪不当回事,情绪是假的。抑郁症、强迫症等各种症状的病人的脑子里有一些回路,这些回路建立以后,这些回路就是佛教里的“妄念”,当妄念一旦产生,越想它,它的变形越厉害,最后它产生的想法,和真实世界是完全不靠谱的。 就像一个人失恋了想要自杀一样,可能半年之后,发现自己当时怎么那么可笑,那就是在失恋那个阶段,回路建立了。..._把自己情绪不当回事,情绪是假的,情绪容易形成回路,就是佛教的妄念,当妄念一旦

java调试与排错-程序员宅基地

文章浏览阅读736次。参考网址:http://www.doc88.com/p-461115156632.html一.Java程序调试与错误收集 1.Web程序的调试与排错:尽量使用System.out.println();和打印hql语句的方式跟踪查错 (1).非代码引起的报错 ①.jar包引起的错误:当从版本控制器上下载项目时,如果项目报错但是所有类文件和配置文件和所有手动..._; nested exception is java.lang.error: unresolved com

javafx sdk html 布局,JavaFX2开发教程-程序员宅基地

文章浏览阅读215次。JavaFX2开发教程更新时间:2017/1/24 18:04:00浏览量:851手机版第一回 JavaFX2.0简介javaFX2.0是JavaFX最新的主要升级发布版。它的很多新特性并不能和1.3版本兼容。如果想要用javaFX做开发,推荐使用2.0版本。建立SDK开始使用javafx的第一步就是在你的电脑上下载和安装javafx SDK。你可以安装完整版SDK,也可以只安装javaF..._javafx-sdk-20 api

Android—案例分析解读:观察者模式(1)-程序员宅基地

文章浏览阅读912次,点赞29次,收藏18次。学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的Android框架体系架构知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的Android框架体系架构知识脑图原件(包括上方的面试解析xmind文档)

随便推点

python列表练习题_python列表题目-程序员宅基地

文章浏览阅读684次,点赞2次,收藏3次。母亲节,晓虎和晓波兄弟俩想要买一只宠物狗送给母亲,他们来到萌宠之家,询问店家所有宠物狗的编号、名称、价格等相关信息,但是他们觉得这样很不方便,正在学习编程的兄弟俩帮店家编写了一个宠物狗信息系统,记录了所有宠物狗的信息,可以快速查询所有狗狗的价格。假设列表list1=[‘安徽’,’江苏’,’浙江’,’广西’,’山东’,’山西’,’湖南’,’湖北’],写出程序的运行结果。4、编写一个程序,用于统计字符串”ab2b3n5n2n67mm4n2”中字符n出现的次数,并把列表中的字符串中的字符进行倒排。_python列表题目

mysql 段错误 (core dumped)-程序员宅基地

文章浏览阅读273次。一直使用好好的mysql命令,突然今天抽风,无论使用任何mysql选项都报“段错误(coredumped)”,以为是mysqld程序出问题了,所以我尝试重启,因为我的环境上是多实例,用了mysqld_multi来管理,没想到一敲mysqld_multi命令也报错:shell >/usr/local/mysql/bin/mysqld_multistop3306-3308m..._mysql段错误(吐核)

通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?(转)-程序员宅基地

文章浏览阅读334次。通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?(转)一、总结一句话总结:.NET是一个平台,包含多种语言,比如(C#、Visual Basic、C++/CLI、Eiffel、F#、IronPython、IronRuby、PowerBuilder、Visual COBOL 以及 Windows PowerShell),而作为一个开发者平台,它不仅..._.net core程序转化为.net framework

Dockerfile中 使用pip镜像源加速下载_docker pip太慢-程序员宅基地

文章浏览阅读6.1k次。用dockerfile文件制作镜像,提高pip下载速度1 安装pip3,python3RUN apt-get updateRUN apt-get install -y python3.5 RUN apt-get install -y python3-pip 2 更新pip,至最新RUN pip3 install pip -U3 配置阿里源RUN pip3 config set..._docker pip太慢

常见的SQL错误和解决方法-程序员宅基地

文章浏览阅读411次。2019独角兽企业重金招聘Python工程师标准>>> ..._sql=错误

防火墙(16)——SNAT和DNAT,DNAT实践_防火墙dnat 实例-程序员宅基地

文章浏览阅读174次。首先我们要知道此实践是基于改变目标网段,而不是SNAT那样改源网段。(1)为我们的主机添加路由:(2)我们对第二台主机用iptables进行修改:重点参数是–to-destination 后面跟我们的真实主机地址,我们的第二台主机只是对外宣称的ip网段只要外部来访问我们的第三台仅主机,我们的路由器(第二台虚拟机)就会将它的目标地址转换为真正的服务器ip..._防火墙dnat 实例

推荐文章

热门文章

相关标签