以下测试总是在我的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) 所以我将最新的ZFS移植到OSX(github/osx.zfs),然后添加了ZVOL,因为它是我想要的东西.现在纯粹的BSD内核方面似乎确实有效,但我遇到了Apple特定集成的问题.我只是错过了一块拼图.
我创建新的虚拟磁盘(ZVOLs)类似于其他Darwin内核例如,通过定义bdevsw和cdevsw并调用bdevsw_add和cdevsw_add_with_bdev.从这里可以看出:create/dev/zfs,它是主要的ZFS节点并处理所有特定的ioctl.然后在此处创建 ZVOL虚拟磁盘节点create/dev/disk_POOL_name
(我曾尝试命名dev的节点作为disk3和rdisk3它没有任何区别).
我处理了我收到的大多数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) 我是使用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",
¬ify_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) 我fexecve(3)在Linux上执行一个存储在memfd中的二进制文件。
macOS是否具有等效功能?我已经尝试过了execve("/dev/fd/%d", [], []),但是失败了EACCES。将文件从该路径复制/dev/fd/%d到新的临时文件,然后执行即可。
有没有一种方法可以在不创建临时文件的情况下进行操作?
我在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)
如果有人能检查这个会很好.
我正在键入一些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) os.platform();
Run Code Online (Sandbox Code Playgroud)
上面的JS指令返回OS的名称.
当它在Ubuntu上运行时,它返回
'linux'
Run Code Online (Sandbox Code Playgroud)当它在Macbook上运行时,它返回
'darwin'
Run Code Online (Sandbox Code Playgroud)我想知道为什么不回来osx,unix或者bsd......?
确实darwin是OSX的叉子?
如何使用Node.js获取MAC下的OS类型?
尝试使用其他 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) 这个问题以前曾针对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 将产生错误。此选项对于随 …