Tag: macos

SIGCHLD是在Linux上的SIGCONT上发送的,而不是在macOS上发送的

在主要过程中,我听SIGCHLD: signal(SIGCHLD, &my_handler); 然后我fork() , execv()并让它在后台运行(例如/ bin / cat)。 当我尝试从终端向子进程发送SIGSTOP时, my_handler() 。 但是当我尝试向它发送SIGCONT时,处理程序不会在macOS上调用,而是在我的Ubuntu上执行。 人: SIGCHLD:儿童身份已发生变化。 我错过了什么吗? 这是预期的行为吗? 我在Ubuntu上编写了我的应用程序,并期望它也可以在mac上运行。 我也试过sigaction() ,但结果相同。 这是一个示例代码,用于演示: #include #include #include #include #include #include void my_handler(int signum) { printf(“\t SIGCHLD received\n”); fflush(stdout); } void my_kill(pid_t pid, int signum) { printf(“Sending %d\n”, signum); fflush(stdout); kill(pid, signum); printf(“Sent %d\n\n”, signum); fflush(stdout); } int main() […]

在Mac OS X上由pclose()引起的Valgrind错误

尝试pclose()之前用popen()打开的管道时,我遇到了valgrind错误。 错误发生在Mac OS X上,但不发生在Linux上。 请考虑以下示例: #include #include int main() { FILE *fp; char buf[4096]; if (!(fp = popen(“ls”, “r”))) exit(-1); while (fscanf(fp, “%s”, buf) == 1) printf(“%s\n”, buf); pclose(fp); return 0; } 我在Mac上得到以下valgrind错误(OS X 10.6.7,valgrind版本3.6.0),除非我删除了pclose()调用: ==21455== Conditional jump or move depends on uninitialised value(s) ==21455== at 0xB1992: pclose (in /usr/lib/libSystem.B.dylib) ==21455== by 0x1F16: main (in […]

在Mac OS X 10.6.8上的gcc-4.2.1中不存在strnlen – 如何定义它?

我正在构建最新的dcraw.c的跨平台OS X版本。我在OS X 10.6.8上执行此操作以获得PPC兼容性。 现在我的问题是strnlen似乎在最新版本的程序中使用,它在10.6.8上不存在,gcc给我这样的消息: Undefined symbols for architecture i386: “_strnlen”, referenced from: … Undefined symbols for architecture ppc: “_strnlen”, referenced from: … 所以,我想定义strnlen但不太清楚如何。 问:任何人都可以在dcraw.c中提供strnlen的工作定义吗? 我的gcc编译命令是这个btw: gcc -o dcraw -O4 -Wall -force_cpusubtype_ALL -mmacosx-version-min=10.4 -arch i386 -arch ppc dcraw.c -lm -DNODEPS

为什么我不能将可选的Swift String传递给允许NULL指针的C函数?

我有一个处理C字符串的C函数。 该函数实际上允许字符串为NULL指针。 声明如下: size_t embeddedSize ( const char *_Nullable string ); 在C中使用这样的函数没问题: size_t s1 = embeddedSize(“Test”); size_t s2 = embeddedSize(NULL); // s2 will be 0 现在我正试图从Swift中使用它。 以下代码有效 let s1 = embeddedSize(“Test”) let s2 = embeddedSize(nil) // s2 will be 0 但什么不起作用是传递一个可选的字符串! 这段代码不会编译: let someString: String? = “Some String” let s2 = embeddedSize(someString) 编译器抛出一个关于可选的未被解包的错误,Xcode询问我是否可能忘记添加! 还是? 。 […]

CoreFoundation打印Unicode字符

我有当前的代码,它似乎工作,除了事实CFShow没有将\ u00e9的unicode UTF8编码转换为é #include int main() { char *s = “This is a test of unicode support: fiancée\n”; CFTypeRef cfs = CFStringCreateWithCString(NULL, s, kCFStringEncodingUTF8); CFShow(cfs); } 输出是 This is a test of unicode support: fianc\u00e9e |____| > é doesn’t output properly. 如何指示CFShow它是unicode? printf是ac字符串时处理得很好。

在两个客户端套接字之间发送数据

我必须在Mac-OS上使用C套接字创建一个应用程序,它将数据从一个套接字发送到其他套接字,就像这样。 服务器等待连接 客户端连接到服务器(从1开始)。 – > socket1 服务器连接到外部服务器并获取套接字。 – > socket2 从现在开始,服务器工作就完成了。 数据交换应仅在客户端套接字(从2)和从3获得的套接字之间进行。 当前实现:服务器建立连接,然后从一个套接字读取数据并发送给其他套接字。 任何想法如何在第3步之后管道两个套接字socket1和socket2。

GCC C / C ++ MEX Matlab R2015 Mac OS X(带有OpenMP)不起作用

我正在尝试使用GCC / G ++在Matlab中编译一个非常简单的MEX文件…首先我检查了它已经安装在matlab中:!gcc 输出:/ usr / bin / gcc …之后,我尝试执行以下操作: mex -v GCC =’/ usr / bin / gcc’hello.c 但它仍然使用XCode Clang进行编译……这是使用G ++和OPENMP库进行并行计算。 已知Mathworks不支持,但可能。

您希望应用程序接受传入的网络连接吗?

我有两个C二进制文件尝试打开网络连接进行通信。 这是用于外部通信。 当我第一次运行时,OS X’防火墙会弹出标题中给出的消息。 我怎么能摆脱这个? 我怀疑这与代码签名有关? 如何对这个二进制文件进行代码签名? 基本上我必须在一台Mac机器上构建这个二进制文件,并在外部应用程序商店中分发。 如果机器中启用了OS X防火墙,如何摆脱防火墙弹出?

中止陷阱:C程序中的6个

我在C中有一个程序。它成功编译并且运行正常但是在main()结束时,它崩溃并且给了我一个Abort trap: 6错误。 我对如何调试这个没有丝毫的线索。 关于SO与Abort trap: 6有关的几个问题Abort trap: 6错误对我没什么帮助。 一般来说,可能是什么问题? (我现在不愿意发布我的源代码,因为它大约有400行代码。如果我知道要查找什么,我会发布一段特定的代码。) 注意:我正在使用GCC在终端中运行程序。 但是当我在XCode中运行它时,我的程序崩溃,如果我停止它,它以exit code: 9结束exit code: 9 。 这是lldb的输出: Process 1191 stopped * thread #1: tid = 0xa759, 0x00007fff8fa08286 libsystem_kernel.dylib`__pthread_kill + 10, queue = ‘com.apple.main-thread’, stop reason = signal SIGABRT frame #0: 0x00007fff8fa08286 libsystem_kernel.dylib`__pthread_kill + 10 libsystem_kernel.dylib`__pthread_kill + 10: -> 0x7fff8fa08286: jae 0x7fff8fa08290 ; __pthread_kill […]

在OSX中崩溃时自动重启程序

可能重复: 如果进程死了,如何编写bash脚本来重启? 我做了一个偶然崩溃的C程序,我无法解决它(getaddrinfo的一些问题,这是一个相当自发的看似)。 我想在崩溃时重启程序。 我觉得这很容易。 我打算用fork分离有问题的libcurl代码,并查看如何从关闭中检测进程,以便可以再次分叉。 但是,我选择了“轻松”选项,尝试重新启动整个程序并从文件中恢复数据。 我试过这个: #!/bin/sh while true; do cd “~/ProgramDir” exec “~/ProgramDir/Program” done 但是当程序退出失败时,如果有意义,它会开始输出下一次执行到终端输入。 所以如果我假装我的程序只是一个Hello World程序,那么它会做这样的事情: bash-3.2$ start.sh Hello World! Hello World! bus error bash-3.2$ Hello World! -bash: Hello: command not found bash-3.2$ Hello World! -bash: Hello: command not found 它不会像以前那样继续该计划。 终端认为程序已退出,但随后将下一次执行的输出作为终端输入。 这样做的正确方法是什么?