当前位置:  技术问答>linux和unix

ACE 的 BUG ? ACE_Process_Options::setenv

    来源: 互联网  发布时间:2017-04-10

    本文导语:  本帖最后由 mymtom 于 2013-03-14 16:30:44 编辑 C++NPv1 8.3 的例子程序,会 Memory Fault. #109 0x2838a53e in vsnprintf () from /lib/libc.so.7 #110 0x281aa607 in ACE_Process_Options::setenv (this=0xbfbfe094, variable_name=0x8048fad "PROGRAM=%s",      f...

本帖最后由 mymtom 于 2013-03-14 16:30:44 编辑
C++NPv1 8.3 的例子程序,会 Memory Fault.

#109 0x2838a53e in vsnprintf () from /lib/libc.so.7
#110 0x281aa607 in ACE_Process_Options::setenv (this=0xbfbfe094, variable_name=0x8048fad "PROGRAM=%s", 
    format=0xbfbfed16 "factorial") at OS_NS_stdio.inl:1044
#111 0x08048b99 in main (argc=1, argv=0xbfbfeba4) at factorial.cpp:25

发现希望调用的函数是
int ACE_Process_Options::setenv (const ACE_TCHAR *format, ...),
结果调用的却是
int ACE_Process_Options::setenv (const ACE_TCHAR *variable_name,
                                 const ACE_TCHAR *format, ...)

这样设计函数有问题啊,
options.setenv ("PROGRAM=%s", ACE::basename (argv[0]));

可以两个都可以调用啊。


8.3 The ACE_Process_Options Class


/**
 * @file    factorial.cpp
 * @brief   
 */

#include "ace/OS.h"
#include "ace/ACE.h"
#include "ace/Process.h"

int main(int argc, char *argv[])
{
    ACE_Process_Options options;
    FILE *fp = NULL;
    char *n_env = NULL;
    int n;

    if (argc == 1) {
        // Top-level process.
        n_env = ACE_OS::getenv ("FACTORIAL");
        n = n_env == 0 ? 0 : atoi (n_env);
        options.command_line ("%s %d", argv[0], n == 0 ? 10 : n);
        const char *working_dir = ACE_OS::getenv ("WORKING_DIR");
        if (working_dir) options.working_directory (working_dir);
        fp = fopen ("factorial.log", "a");
        options.setenv ("PROGRAM=%s", ACE::basename (argv[0]));
    } else {
        fp = fopen ("factorial.log", "a");
        if (atoi (argv[1]) == 1) {
            // Base case
            fprintf (fp, "[%s|%d]: base casen",
                    ACE_OS::getenv ("PROGRAM"), ACE_OS::getpid ());
            fclose (fp);
            return 1;
        } else {
            n = atoi (argv[1]);
            options.command_line ("%s %d", argv[0], n - 1);
        }
    }

    ACE_Process child;
    // Make ''recursive'' call.
    child.spawn (options);
    child.wait ();
    int factorial = n * child.exit_code (); // Compute n factorial
    fprintf (fp, "[%s | %d]: %d! == %dn",
            ACE_OS::getenv ("PROGRAM"), ACE_OS::getpid (), n, factorial);
    fclose (fp);

    return 0;
}

|
这么冷的帖

|

|
呃,这重载不起作用了?直接options.setenv ("%s=%s", "PROGRAM", ACE::basename(argv[0]));算了。。。

|
发现希望调用的函数是
int ACE_Process_Options::setenv (const ACE_TCHAR *format, ...),
结果调用的却是
int ACE_Process_Options::setenv (const ACE_TCHAR *variable_name,
                                 const ACE_TCHAR *format, ...)
函数调用有个最佳匹配的问题,当只有一个参数时,肯定调用int ACE_Process_Options::setenv (const ACE_TCHAR *format, ...), 而大于等于两个参数时就是int ACE_Process_Options::setenv (const ACE_TCHAR *variable_name,
                                 const ACE_TCHAR *format, ...)。 所以说,,,

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ACE的ACE_Atomic_Op有bug?
  • 请教ACE中ACE_Connector如何处理收到的数据?
  • ACE仅仅实例化一个对象ACE_TP_Reactor tpReactor程序就退出,请高手指教
  • ACE 如何在linux下设置环境变量
  • ACE编程问题?大家进来看看!
  • 安装过 ACE 的 来帮个忙
  • gcc 和ace的问题
  • ACE与网络IPC的关系是什么?
  • 谁能告诉我如何在redhat9下安装ACE环境?
  • ubuntu下编译ACE出错
  • 面向对象的网络开发包 ACE
  • 请教kdevelop编译ACE的问题
  • ACE用得多吗?
  • 基于 Web 的代码编辑器 ACE JS
  • ACE linux下的异步IO
  • 在HP-UX 11.11上安装ACE的问题
  • ACE在unix,linux,windows,哪个环境下发挥的最好?
  • ACE_HANDLE 是什么类型
  • linux 下 ACE 编译问题
  • 自己做的ACE培训资料(打个小广告)
  • ACE怎么生成静态链接库


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,