小编mat*_*eek的帖子

我应该允许什么尺寸的strerror_r?

OpenGroup POSIX.1-2001定义了strerror_r,Linux标准基础核心规范3.1也是如此.但我找不到对错误消息可合理预期的最大大小的引用.我希望有一些定义可以放在我的代码中,但没有我能找到的.

代码必须是线程安全的.这就是使用strerror_r而不是strerror的原因.

有人知道我可以用的符号吗?我应该创建自己的?


int result = gethostname(p_buffy, size_buffy);
int errsv = errno;
if (result < 0)
{
    char buf[256];
    char const * str = strerror_r(errsv, buf, 256);
    syslog(LOG_ERR,
             "gethostname failed; errno=%d(%s), buf='%s'",
             errsv,
             str,
             p_buffy);
     return errsv;
}
Run Code Online (Sandbox Code Playgroud)

从文件:

公开集团基本规格第6期:

错误

如果出现以下情况,strerror_r()函数可能会失败:

  • [ERANGE]通过strerrbuf和buflen提供的存储空间不足,无法包含生成的消息字符串.

从来源:

的glibc-2.7 /的glibc-2.7 /串/ strerror.c:41:

    char *
    strerror (errnum)
         int errnum;
    {
        ...
        buf = malloc (1024);
Run Code Online (Sandbox Code Playgroud)

c linux standards posix glibc

33
推荐指数
3
解决办法
1万
查看次数

如何在Ada中从其他字符串构建字符串?

我想在日志文件中输出标题行,然后在数据前输出一行" - ".为此,我创建了一个标题字符串,然后输出相同数量的' - '.

但是下面的代码总是因CONSTRAINT_ERROR而失败,因为生成的字符串不是1024个字符.在Ada中,字符串分配需要完全相同的长度而不仅仅是足够的容量.

选项1)是计算确切的长度,但对未来的变化是脆弱的.选项2)是使用String以外的东西.

procedure F() is 
    Msg : String(1..1024);
begin
    Open_Log();
    Msg :=       FLS(" Field1", 12) &
           "|" & FLS(" Field2", 12) &
           "|" & FLS(" Field3", 16);

    Log_To_File("# " & Msg);
    Log_To_File("# " & Fill_String(Msg'Last, '-'));
end;
Run Code Online (Sandbox Code Playgroud)

string ada

7
推荐指数
1
解决办法
3175
查看次数

使用glibc,为什么我的gethostbyname在I/DHCP更改DNS服务器后失败?

如果我们的服务器(在设备上运行)在获取DHCP租约之前启动,那么它永远不能使用主机名进行连接.

如果发生这种情况,它可以按IP地址查找主机,但不能通过DNS查找.

我最初认为卷曲DNS缓存因卷曲连接失败而出错.但我使用CURLOPT_DNS_CACHE_TIMEOUT来防止curl缓存地址,但连接仍然失败.

dns glibc dhcp

6
推荐指数
1
解决办法
3484
查看次数

无法访问Ada泛型参数的成员

我正在尝试编写一个通用包,其中一个操作是校验通过总线接收的数据记录.记录类型会有所不同,它是一个通用参数.但是,任何访问泛型参数成员的尝试都会导致编译错误.

错误......(Ada 95 GNAT 2009)

file.adb:XX no selector "Data" for private type "The_Transfer_Type" defined at file.ads:YY
Run Code Online (Sandbox Code Playgroud)

声明......

generic
  type The_Transfer_Type is private;
  SIZE : Integer;
package CC_Test_Channel is
  function Checksum(Msg : The_Transfer_Type) return Integer;
end package
Run Code Online (Sandbox Code Playgroud)

身体......

function Checksum(Msg : The_Transfer_Type) return Integer is
  Sum : Integer := 0;
begin
  -- calculate the checksum
  for i in 1 .. SIZE loop
    Sum := Sum + Integer(Msg.Data(i));
  end loop;
  return Sum;
end Checksum;
Run Code Online (Sandbox Code Playgroud)

ada

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

为什么WaitForSingleObject会返回WAIT_FAILED

MSDN说

如果函数失败,则返回值为WAIT_FAILED.要获取扩展错误信息,请调用GetLastError.

代码是:

HANDLE     m_mutex_handle;    /**< m_mutex_handle. The handle to the created mutex. */
m_mutex_handle = ::CreateMutex( 0, false, NULL );
::WaitForSingleObject( m_mutex_handle, INFINITE );
Run Code Online (Sandbox Code Playgroud)

但是可能发生的原因是什么?

windows winapi mutex

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

在Ada中,如何使用重复的数字初始化数组常量?

我需要一个820个零的数组,用于数学函数.

在CI中可以编写以下内容,编译器将填充数组:

 const float EMPTY_NUMBER_A[820] = { 0.0, };
Run Code Online (Sandbox Code Playgroud)

但是在Ada中这是不可能的.我真的不想将820元素硬编码为0.0.有没有办法让编译器这样做?

 type Number_A is array (1 .. 820) of Float;
 EMPTY_NUMBER_A : constant Number_A := ???;
Run Code Online (Sandbox Code Playgroud)

使用Ada 95和GNAT.

arrays constants ada

3
推荐指数
1
解决办法
3699
查看次数

如何确定 Ada 95 中浮点数的模数

我需要确定一个时间周期的剩余量。要在 CI 中做到这一点,将使用 fmod。但在 ada 我找不到类似功能的参考。它需要准确,并且需要返回一个浮点数以获得精度。

那么如何确定 Ada 95 中浮点数的模数?

 elapsed := time_taken mod 10.348;
 left := 10.348 - elapsed;
 delay Duration(left);
Run Code Online (Sandbox Code Playgroud)

math floating-point ada

2
推荐指数
1
解决办法
2249
查看次数

你如何编码来确定Ada中值的对数?

使用Ada(GNAT):我需要确定给定值的10的幂.最明显的方法是使用对数; 但是无法编译.

with Ada.Numerics.Generic_Elementary_Functions;
procedure F(Value : in Float) is
      The_Log : Integer := 0;
begin
      The_Log := Integer(Log(Value, 10));
      G(Value, The_Log);
end;
Run Code Online (Sandbox Code Playgroud)

错误:

  • utilities.adb:495:26:"日志"不可见
    • utilities.adb:495:26:a-ngelfu.ads:24处的不可见声明,第482行的实例
    • utilities.adb:495:26:a-ngelfu.ads:23处的不可见声明,第482行的实例

那么我尝试引用包,但也失败了:

with Ada.Numerics.Generic_Elementary_Functions;
procedure F(Value : in Float) is
      The_Log : Integer := 0;
      package Float_Functions is new Ada.Numerics.Generic_Elementary_Functions (Float);
begin
      The_Log := Integer(Float_Functions.Log(Value, 10));
      G(Value, The_Log);
end;
Run Code Online (Sandbox Code Playgroud)

错误:

  • utilities.adb:495:41:没有候选解释符合实际值:
  • utilities.adb:495:41:调用"Log"时参数太多
  • utilities.adb:495:53:预期类型"Standard.Float"
  • utilities.adb:495:53:在a-ngelfu.ads:24调用"Log"时发现类型为通用整数==>,第482行为实例

logarithm ada

0
推荐指数
1
解决办法
1963
查看次数

标签 统计

ada ×5

glibc ×2

arrays ×1

c ×1

constants ×1

dhcp ×1

dns ×1

floating-point ×1

linux ×1

logarithm ×1

math ×1

mutex ×1

posix ×1

standards ×1

string ×1

winapi ×1

windows ×1