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) 我想在日志文件中输出标题行,然后在数据前输出一行" - ".为此,我创建了一个标题字符串,然后输出相同数量的' - '.
但是下面的代码总是因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) 如果我们的服务器(在设备上运行)在获取DHCP租约之前启动,那么它永远不能使用主机名进行连接.
如果发生这种情况,它可以按IP地址查找主机,但不能通过DNS查找.
我最初认为卷曲DNS缓存因卷曲连接失败而出错.但我使用CURLOPT_DNS_CACHE_TIMEOUT来防止curl缓存地址,但连接仍然失败.
我正在尝试编写一个通用包,其中一个操作是校验通过总线接收的数据记录.记录类型会有所不同,它是一个通用参数.但是,任何访问泛型参数成员的尝试都会导致编译错误.
错误......(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) 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)
但是可能发生的原因是什么?
我需要一个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.
我需要确定一个时间周期的剩余量。要在 CI 中做到这一点,将使用 fmod。但在 ada 我找不到类似功能的参考。它需要准确,并且需要返回一个浮点数以获得精度。
那么如何确定 Ada 95 中浮点数的模数?
elapsed := time_taken mod 10.348;
left := 10.348 - elapsed;
delay Duration(left);
Run Code Online (Sandbox Code Playgroud) 使用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)
错误:
那么我尝试引用包,但也失败了:
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)
错误: