小编Tim*_*ost的帖子

覆盖C中的函数调用

我想为了记录调用而覆盖对各种API的某些函数调用,但我也可能希望在将数据发送到实际函数之前对其进行操作.

例如,假设我getObjectName在源代码中使用了一个名为数千次的函数.我想暂时覆盖此函数,因为我想更改此函数的行为以查看不同的结果.

我创建了一个像这样的新源文件:

#include <apiheader.h>    

const char *getObjectName (object *anObject)
{
    if (anObject == NULL)
        return "(null)";
    else
        return "name should be here";
}
Run Code Online (Sandbox Code Playgroud)

我像往常一样编译所有其他源代码,但是在链接API的库之前我首先将它链接到此函数.这工作正常,但我显然不能在我的重写函数中调用真正的函数.

是否有一种更简单的方法来"覆盖"一个函数而不会链接/编译错误/警告?理想情况下,我希望能够通过编译和链接一个或多个额外的文件来覆盖该函数,而不是通过链接选项或改变我的程序的实际源代码.

c linker overriding function

68
推荐指数
7
解决办法
9万
查看次数

将省略号传递给另一个可变参数函数

我有大约30个可变函数.每个人都接受一个路径作为最终参数,例如:

bool do_foo(struct *f, int q, const char *fmt, ...)
Run Code Online (Sandbox Code Playgroud)

在每个函数中,我必须检查扩展格式是否小于或等于特定大小.所以,我发现自己复制/粘贴相同的代码块来检查vsnprintf()没有打印多少个字符,相应地设置并保留errno写入.

我想要做的是编写一个函数来执行此操作,这将返回一个已知为安全大小的静态分配(扩展)字符串,或者在失败时新初始化的字符串,可以针对NULL进行检查.检查还必须确定字符串是绝对路径还是相对路径,这会影响字符串的安全大小.这是很多重复的代码,它开始闻起来.

有没有办法可以将elipsis的内容从我的函数的条目传递给另一个函数?或者我必须先调用va_start(),然后传递va_list给辅助函数?

编辑:

我完全不反对把它传递va_list给帮助者,我只是想确保没有别的东西存在.在我看来,编译器理解可变参数的开始位置,所以我只是好奇我是否可以告诉它传递它们.

c variadic-functions

68
推荐指数
2
解决办法
4万
查看次数

Eclipse - 在Android设备选择器中定位"未知"

我正在使用LG-P500.当我尝试在"Android设备选择器"中选择它时,Eclipse识别手机但不识别目标.它说目标"未知".由于这个问题,我无法选择手机作为Android设备.

如何让Eclipse识别目标?

java eclipse android

68
推荐指数
8
解决办法
8万
查看次数

57
推荐指数
5
解决办法
6万
查看次数

Autoconf和Autotools的替代品?

我是GNU Autotools的常用用户(主要是Autoconf,偶尔也是Libtool).我正在开展一个可移植性将成为关键点的项目.然而,团队的其他成员只是不习惯使用m4.我得到这个在我的收件箱从不是一个,而是四个人:

m4不是lisp,该死!

无论如何,也许有人可以推荐基于Python或PHP的东西?我正在研究一棵更大的树的C端; 我可以肯定会出现Python或PHP 5,因为它们是先决条件.

c autoconf autotools

54
推荐指数
5
解决办法
2万
查看次数

通过PHP执行root命令

我有一个CentOS 5.7 linux服务器并使用php5.3.x.

在pfSense系统上,您可以使用php网页重新启动需要root权限的服务.

我正在尝试做类似的事情,我已经写了一些PHP代码来执行shell命令.例如,要重新启动sshd服务:

<?php
exec('/sbin/service sshd restart');
?>
Run Code Online (Sandbox Code Playgroud)

我尝试通过exec函数执行该命令,但它需要root权限,但我们有一个apache用户权限.

我遇到了一些解决方案:

  1. "用root用户运行apache"真的不安全.我不想那样做.
  2. "apache ALL = NOPASSWD:/ sbin/service to/etc/sudoers"我试过但仍然有问题.

还有其他方法吗?谢谢你的回答.


现在..这很有趣.我试过@refp post,它工作了我的本地ubuntu服务器.但是当我在我的cenOS vps服务器上尝试相同时.它不起作用.这是apache的错误日志"rm:无法删除`/ var/lock/subsys/vsftpd':权限被拒绝"

php apache permissions root

53
推荐指数
4
解决办法
8万
查看次数

"没有找到您要查的资源." 在网址末尾有"点"时出错

我正在使用ASP .NET MVC Beta,当我使用这个最后有一个"点"的url时,我得到HTTP 404(无法找到资源)错误:

http:// localhost:81/Title/Edit/Code1.

如果我在末尾删除点或点在中间某处我没有得到错误.

我尝试调试,但它在MvcHandler中的ProcessRequest之前从"System.Web.CachedPathData.GetConfigPathData(String configPath)"得到错误.

网址末尾不允许使用"点"吗?或者有没有办法修复路由定义来处理这个URL?


举个例子:我有一个名为Detail1 [Id(整数),Code(string),Description(string)]的表,它与Master1通过它的Id列有FK关系.每当我选择Master1的记录时,我也会选择它的Detail1记录来获取它的Code字段.为了不每次都进行这种连接(因为通常不仅有一个细节,还有不止一个)我选择不使用Id列,而是制作Detail1的Code PK.

但是当我摆脱Id并使用Code作为PK时,我的路由也开始使用Code字段,如:Detail1\Edit\Code1

本规范可以包含任何内容或最终内容,包括DOT.在某些情况下,我可以在最后禁止DOT,但有时它确实很有意义.

而且我也看到这篇帖子说路线非常灵活,所以我觉得我的路线不那么奇怪.

所以这就是为什么我做一些非标准的事情.有什么建议?

还有为什么在网址末尾有一个DOT是如此奇怪?

.net asp.net-mvc routing routes

51
推荐指数
4
解决办法
2万
查看次数

你容忍多少重复的代码?

在最近的一次代码审查中,我在一个类中发现了几行重复​​逻辑(少于15行).当我建议作者重构代码时,他认为代码更容易理解.在再次阅读代码后,我不得不同意提取重复的逻辑会稍微损害可读性.

我知道DRY是指南,而不是绝对的规则.但总的来说,你是否愿意以DRY的名义伤害可读性?

refactoring coding-style dry code-duplication

49
推荐指数
5
解决办法
1万
查看次数

posix_memalign/memalign做了什么

我正在努力了解功能memalign()和功能posix_memalign().阅读可用的文档没有帮助.

有人可以帮助我理解它是如何工作的以及它用于什么?或者,也许提供一个用法示例?

我试图了解linux内存是如何工作的,我需要编写自己的简单内存池(低碎片堆).

c memory memory-pool

49
推荐指数
3
解决办法
4万
查看次数

如何使用jQuery相对于鼠标指针定位div?

假设我的页面中有一个链接,我希望当我将鼠标放在链接上时,将根据鼠标x,y显示div.

我怎样才能使用jQuery实现这一目标?

jquery

45
推荐指数
3
解决办法
11万
查看次数