标签: darwin

为什么Darwin的strtod线程不安全?

以下测试总是在我的Intel Mac Mini上为我生成故障或总线错误.

编译:

uname -a:
Darwin vogon13 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386 i386

g++ -v:
Target: i686-apple-darwin9
Configured with: /var/tmp/gcc/gcc-5493~1/src/configure
--disable-checking -enable-werror --prefix=/usr --mandir=/share/man
--enable-languages=c,objc,c++,obj-c++
--program-transform-name=/^[cg][^.-]*$/s/$/-4.0/
--with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib
--build=i686-apple-darwin9 --with-arch=apple --with-tune=generic
--host=i686-apple-darwin9 --target=i686-apple-darwin9
Thread model: posix
gcc version 4.0.1 (Apple Inc. build 5493)
Run Code Online (Sandbox Code Playgroud)

编译命令:

"g++"  -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall
-pedantic -g -no-cpp-precomp -gdwarf-2 -Wno-long-double -Wno-long-long -fPIC
-DBOOST_DATE_TIME_NO_LIB=1 -DBOOST_THREAD_NO_LIB=1 -DBOOST_THREAD_USE_LIB=1
-DDATE_TIME_INLINE -DNDEBUG  -I"." -c -o "strtod_test.o" "strtod_test.cpp"

"g++"  -o "strtod_test" "strtod_test.o"
"libboost_thread-xgcc40-mt-s.a" …
Run Code Online (Sandbox Code Playgroud)

c++ macos darwin thread-safety strtod

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

Darwin内核磁盘设备通过磁盘仲裁

所以我将最新的ZFS移植到OSX(github/osx.zfs),然后添加了ZVOL,因为它是我想要的东西.现在纯粹的BSD内核方面似乎确实有效,但我遇到了Apple特定集成的问题.我只是错过了一块拼图.

我创建新的虚拟磁盘(ZVOLs)类似于其他Darwin内核例如,通过定义bdevswcdevsw并调用bdevsw_addcdevsw_add_with_bdev.从这里可以看出:create/dev/zfs,它是主要的ZFS节点并处理所有特定的ioctl.然后在此处创建 ZVOL虚拟磁盘节点create/dev/disk_POOL_name

(我曾尝试命名dev的节点作为disk3rdisk3它没有任何区别).

我处理了我收到的大多数ioctl newfs_msdos newfs_hfs newfs_udf,这里处理ioctl

所以,基本上,它创建了BSD/dev/entries,我可以newfs我的虚拟磁盘,我可以挂载它,使用它.从Unix POV,它似乎作为磁盘工作.

但不是在OSX中.它不会显示在"diskutil list"中,也不会显示在GUI Disk Utility中.显然,我需要在内核中做一些其他事情来考虑它.或者,这是我应该在用户地区做的事情吗?

# ./zpool.sh create -f BOOM ~/pool-image.bin 
# ./cmd.sh zfs create -V 50M -o volblocksize=4096 BOOM/vol
# ls -l /dev/*disk*
brw-r-----  1 root      operator    1,   3 Apr  9 01:48 disk0s2
brw-r-----  1 root      operator    1,   2 Apr  9 01:48 disk0s1
brw-r-----  1 root      operator    1,   0 Apr …
Run Code Online (Sandbox Code Playgroud)

kernel zfs darwin disk device

5
推荐指数
0
解决办法
226
查看次数

iPhone Objective-c检测屏幕锁定

我是使用Objective-c制作iPhone App的新手

我想制作在iPhone屏幕锁定时发送通知的应用程序(按下锁定按钮)如何制作此应用程序?

我正在尝试使用"applicationWillSuspend",但是

/*----------------------------------------*/
- (void)applicationWillSuspend
{
     NSLog(@"WillSuspend");
}
/*----------------------------------------*/
Run Code Online (Sandbox Code Playgroud)

此代码不起作用

我不确定何时调用applicationWillSuspend

拜托,给我一些知识

#import "AppDelegate.h"
#import <notify.h>

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    // iOS8 Notification permit
    if ([UIApplication
         instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
        [[UIApplication sharedApplication]
         registerUserNotificationSettings:[UIUserNotificationSettings
                                           settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound
                                           categories:nil]];
    }
    return YES;

    int notify_token;
    notify_register_dispatch("com.apple.springboard.lockstate",
                             &notify_token,
                             dispatch_get_main_queue(),
                             ^(int token)
                             {
                                 uint64_t state = UINT64_MAX;
                                 notify_get_state(token, &state);
                                 if(state == 0) {
                                     NSLog(@"unlock device");
                                 } else {
                                     NSLog(@"lock device");
                                 } …
Run Code Online (Sandbox Code Playgroud)

iphone darwin objective-c ios appdelegate

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

在MacOS上相当于fexecve

fexecve(3)在Linux上执行一个存储在memfd中的二进制文件。

macOS是否具有等效功能?我已经尝试过了execve("/dev/fd/%d", [], []),但是失败了EACCES。将文件从该路径复制/dev/fd/%d到新的临时文件,然后执行即可。

有没有一种方法可以在不创建临时文件的情况下进行操作?

macos darwin exec system-calls

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

OSX上的PF头net / pfvar.h丢失

PF(数据包过滤器)是内核级别的防火墙,包含在类似BSD的内核中(Darwin内核基本上是BSD),并且BSD手册页提供了有关这些标头的详细文档,从而可以通过编程方式控制PF。PF包含在OSX内核中,即使默认情况下它是禁用的。

我知道这是可以控制PF在OSX好歹,因为像应用Murus存在,这种低级别提供用户友好的GUI“防火墙之王”,而这个API是不是没有手动/etc/pf.conf解析,我首先怀疑。

有什么方法可以从OSX应用程序添加这些标头并控制PF?

MacOS Sierra 10.12.6

Xcode 9.2(9C40b)

更新我发现的一些信息,虽然有些过时

macos bsd firewall darwin

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

uniq在达尔文炮弹上的奇怪行为

我在linux机器上的许多shell脚本中使用了'uniq -d -c file',它确实有效.在我的MAC(安装了开发人员工具的OS X 10.6.7)上似乎不起作用:

$ uniq -d -c testfile.txt 
usage: uniq [-c | -d | -u] [-i] [-f fields] [-s chars] [input [output]]
Run Code Online (Sandbox Code Playgroud)

如果有人能检查这个会很好.

shell darwin

4
推荐指数
1
解决办法
743
查看次数

为什么我可以返回一个返回类型为AnyObject的bool?与UIKit而不是达尔文

我正在键入一些Swift代码,因为我很无聊并且一段时间没有编写Swift.

当我包含UIKit时,为什么这段代码有用呢?

import UIKit

public class foo {
  private var boolTest : Bool?

  init() {
    boolTest = true
  }

  public func call() -> AnyObject? {
    if let bool = boolTest {
      return bool
    }
    else {
      return nil
    }
  }
}

foo().call()
Run Code Online (Sandbox Code Playgroud)

当我导入Darwin而不是UIKit时,它不起作用.

import Darwin

public class foo {
  private var boolTest : Bool?

  init() {
    boolTest = true
  }

  public func call() -> AnyObject? {
    if let bool = boolTest {
      return bool
    }
    else {
      return nil
    } …
Run Code Online (Sandbox Code Playgroud)

darwin uikit ios swift

4
推荐指数
1
解决办法
113
查看次数

os.platform()返回darwin而不是OSX

os.platform();
Run Code Online (Sandbox Code Playgroud)

上面的JS指令返回OS的名称.

我想知道为什么不回来osx,unix或者bsd......?

确实darwin是OSX的叉子?

如何使用Node.js获取MAC下的OS类型?

macos operating-system darwin node.js

4
推荐指数
1
解决办法
1379
查看次数

DYLD_PRINT_LIBRARIES 不工作

尝试使用其他 DYLD_ 属性进行试验时,我发现 jvm 正在使用属性进行操作,并且在执行过程中会忽略这些属性。
我的 Java 测试:

class Env {
    public static void main(String... args) {
        System.getenv().entrySet().stream().forEach(e -> System.out.println(e.getKey() + " = " + e.getValue()));
    }
}
Run Code Online (Sandbox Code Playgroud)

调用:

$ export DYLD_PRINT_LIBRARIES=1
$ export MY_PRINT_LIBRARIES=2
$ javac Env.java && java Env|grep PRINT
MY_PRINT_LIBRARIES = 2
$ 
Run Code Online (Sandbox Code Playgroud)

另一方面,我的 C 测试:

#include <stdio.h>

int main(int argc, char **argv, char **envp) {
    while (*envp) {
        printf("%s\n", *envp);
        envp++;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

调用:

$ gcc env.c && ./a.out|grep PRINT
dyld: loaded: /Users/okutane/test/java/./a.out
dyld: …
Run Code Online (Sandbox Code Playgroud)

java macos darwin dyld dynamic-library

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

xcode ld 检测静态库中的重复符号

这个问题以前曾针对gcc提出过,但达尔文的 ld (clang?)似乎以不同的方式处理这个问题。

假设我main()在两个文件 main1.cc 和 main2.cc 中定义了一个函数。如果我尝试将它们一起编译,我将得到(所需的)重复符号错误:

$ g++ -o main1.o -c main1.cc
$ g++ -o main2.o -c main2.cc
$ g++ -o main main1.o main2.o
duplicate symbol _main in:
    main1.o
    main2.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

但是,如果我将其中之一粘贴到静态库中,当我链接应用程序时,我不会收到错误:

$ ar rcs libmain1.a main1.o
$ g++ -o main libmain1.a main2.o
(no error)
Run Code Online (Sandbox Code Playgroud)

使用 gcc,您可以使用 lib 包装--whole-archive,然后 gcc 的 ld 将产生错误。此选项对于随 …

xcode darwin clang ld

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