如何让系统调用跨平台:可维护且最佳实践

问题描述 投票:0回答:1

我有数百个这样的系统调用:

char buffer[MAX_LINE_LENGTH];

// ...

sprintf(buffer,"cat cgx_tmp.fbl >> cgx_tmp2.fbl");
system(buffer);
sprintf(buffer,"mv -f cgx_tmp2.fbl %s.fbl", datin);
system(buffer);
sprintf(buffer,"rm -f cgx_tmp.fbl");
system(buffer);

为了修复代码,即使系统调用跨平台,数百个特定于操作系统的系统调用(如

mv
rm
cat
)可能会被修改如下:

#ifdef WIN32
    sprintf (buffer, "move /y \"%s\" \"%s.fbb\"", datin, setname );
#else
    sprintf (buffer, "mv %s %s.fbb", datin, setname );
#endif

问题

我只是想在实际修复代码之前先问一下。上述

#ifdef
的做法可以接受吗?是否有考虑 Windows 操作系统或任何其他平台的系统调用的最佳实践?

如果首选任何其他方法,如果您能给出一些示例,那就太好了。这样我就可以将它们用作我的修复的参考。感谢您的帮助。

c windows unix cross-platform system-calls
1个回答
1
投票

这是我认为 C 源文件包含正确的情况之一。

拥有两个或多个包含特定系统命令的文件并包含它们

#if defined(WIN32)
#include "win.c"
#else
#include "linux.c"
#endif
© www.soinside.com 2019 - 2024. All rights reserved.