Articles of OSX

代码如何存储在可执行文件中?

我读过一个可执行文件将代码存储在不同的部分。 例如,数据的一个单独的部分等。这是通用的不同平台,如Win或MacOs或Linux? 一些洞察这将是非常有帮助的。

什么是用户进程的有效地址空间? (OS X和Linux)

mmap系统调用文档说,如果出现以下情况,函数将失败: 指定了MAP_FIXED,并且addr参数不是页alignment的,或者所需地址空间的一部分驻留在用户进程的有效地址空间之外。 我无法在任何地方find说明什么是有效地图的文档。 (我有兴趣在OS X和Linux上执行此操作,理想情况下相同的地址对于这两个操作都是有效的)。

Mac和Linux上qsort_r的不同声明

我们来看看Linux中的函数qsort_r (/usr/include/stdlib.h): typedef int (*__compar_d_fn_t)(const void *, const void *, void *); extern void qsort_r (void *__base, size_t __nmemb, size_t __size, __compar_d_fn_t __compar, void *__arg) __nonnull ((1, 4)); 让我们来看看Mac中的函数qsort_r (/usr/include/stdlib.h): void qsort_r(void *, size_t, size_t, void *, int (*)(void *, const void *, const void *)); 正如你所看到的,这些声明是彼此不同的(参数序列)。 这是令人惊讶的! 抱怨某个地方解决这个问题会有效吗?

在Mac OS X上使用AWK分割文件

我想在特定的分隔符上使用AWK拆分文件。 awk代码如下所示: awk '/SEPARATOR/{n++}{print > "part" n ".txt" }' in.txt 这个代码在我的Linux系统上完美的工作。 但是,当在Mac OS X上运行完全相同的代码时,出现以下错误: awk: syntax error at source line 1 context is /SEPARATOR/{n++}{print > "part" >>> n <<< ".txt" } awk: illegal statement at source line 1 我认为这是在OS X附带的awk和Linux的mawk之间的某种区别。 在打印中删除string连接可以让awk程序在两个平台上工作,但我更愿意保留前缀和surfix。 如何编写一个awk程序,将分隔符上的文件分成多个编号的部分,并在两个平台上工作?

OS X UDP发送错误:55没有可用的缓冲区空间

当我在OSX10.9.1上的python3.3中实现RUDP时,我注意到下面的代码实际上并没有做它在linux上的工作:(对于C,Java和C#/ Mono来说,哪种语言,同样的行为并不重要) from socket import * udp = socket(AF_INET, SOCK_DGRAM) udp.setsockopt(SOL_SOCKET, SO_REUSEADDR, True) udp.bind(('0.0.0.0', 1337)) udp.setblocking(False) udp.setsockopt(SOL_IP, IP_TTL, 4) udp.connect(('8.8.8.8', 12345)) buf = b'x' * 400 for _ in range(1024 * 1024 * 10): udp.send(buf) 这个代码只是写了很多udp包到8.8.8.8,这些包在4跳之后被丢弃,所以他们不应该到达目的地,只是模拟出站stream量。 问题: 这段代码会抛出一个OSError(55,'No buffer space available')错误,而在Linux(Windows)上,它会抛出一个BlockingIOError,这很好,因为它是一个非阻塞套接字。 所以,在Linux和Windows上,套接字在OSX上的行为是正确的,这是一个OSError,这是不好的。 但真正有趣的是,即使我把这个套接字置于阻塞模式下,这个代码仍然会在OSX上抛出一个错误。 而在Linux和Windows上,这不会引发任何错误,正如所料,它只是阻止。 这是基于BSD系统的实现细节吗? 或者我错过了一些重要的networking设置? [编辑] 我忘了提到我正在千兆局域网中testing这种行为。 我认为这是问题。 我连接到一个100mbit的networking,问题就没有了,即使使用300mbit的wlan,问题也没有发生。 现在我想这是连接到高速networking时的一些OSX特定行为。 [编辑 – 最后]我终于find原因: http://lists.freebsd.org/pipermail/freebsd-hackers/2004-January/005369.html […]

我应该释放由setlocale返回的指针吗?

int main(int argc, char *argv[]) { char *ret = setlocale(LC_ALL, NULL); // should I free 'ret' ??? // free(ret); return 0; } 我已经在Linux和OS X 10.10上都试过了,在Linux中,我不能调用'free',但是在OS X中,如果我不叫'free',valgrind会抱怨内存泄漏。 ==62032== Memcheck, a memory error detector ==62032== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==62032== Using Valgrind-3.11.0.SVN and LibVEX; rerun with -h for copyright info […]

在Mac和Linux上存储非用户特定的应用程序数据 – 权限

我不久前发布了一个关于在Linux上存储非用户特定应用程序数据的问题。 正如你所看到的,我打算在Mac上使用“/ Library / Application Support”,或者在Linux上使用“/ var / lib”或“/ usr / share”。 在现有的应用程序(当前仅限于Windows)上,我们使用Vista和Windows 7上的“\ ProgramData”和Windows XP上的“\ Documents and Settings \ All Users”(均使用System.getenv(“ALLUSERSPROFILE”)在Mac或Linux上)。 我在Mac和Linux的位置find的问题(不像Windows的问题)是非root / admin用户无法访问的,这种做法无法达到使用它们的目的。 这种情况最好的做法是什么? 我们可以简单地将应用程序数据存储在用户的主目录中。 我实际上并不会因此而死气沉沉,因为当新用户尝试使用它时,应用程序显得完全“新”似乎是合理的。 这给我们带来的主要问题是,每个用户都必须input序列号才能激活应用程序(激活信息是我们需要存储的“应用程序数据”的一部分)。 这不是很理想。 这就是说,如果没有真正的select,那么我认为它将不得不做。

在Mac上编译C ++程序以在Linux上运行

可能重复: 如何交叉编译从Mac OS X到Linux x86? 我有一个应用程序,我用C ++ / SDL编写,使用FMOD库。 该应用程序是可移植的,编译没有任何代码在Mac和Linux上的变化。 但是有一个令人烦恼的是,当我想发布Linux版本时,我必须运行我的Linux机器,在那里复制源代码(通过USB驱动器,因为我没有networking,这是一个旧的笔记本电脑)并编译它,然后复制它再次通过USB到我的Mac并上传。 我的问题是 – 有没有更好的方法呢? 理想情况下,我可以编译应用程序直接从Xcode在Linux上运行,我为Mac编译它?

amd64 psABI在哪里?

AMD64 psABI曾经被x86-64.org托pipe。 我有一个pdf文件的副本,它明确地说: 体系结构规范可在网站http://www.x86-64.org/documentation上find 。 但http://www.x86-64.org已经很长一段时间了。 至less几个月。 有谁知道最新的PSABI可以从哪里拿走?

如何针对旧版本的库进行configuration/制作/安装?

我试图安装一个软件( moddims )取决于“Imagemagick 6.3.9+” – 我试图安装ImageMagick(6.5.4-5)的最新版本,但得到了以下错误,当我试图“使“moddims: mod_dims_ops.c: In function 'dims_smart_crop_operation': mod_dims_ops.c:34: error: too few arguments to function 'ParseGravityGeometry' 据推测,函数签名在ImageMagick 6.3.9和当前版本之间有所变化。 我想尝试安装moddims对旧版本的ImageMagick – 但我想安装ImageMagick 6.3.9而不会干扰已经安装的6.5.4-5版本。 我可以使用什么./configure咒语a)安装旧版本的ImageMagick,以免覆写或干扰我的现代版本,b)编译moddims以使用旧版本? 我在OSX上,但是当我以后需要在Linux生产服务器上安装moddim时,我预计会遇到同样的问题。