如果我写信给终端在Mac上执行write
系统调用,它会成功:
int main() {
long SYS_WRITE = 0x2000004;
long STDOUT = 1;
long result;
char* str = "Hello world";
__asm__ __volatile__ (
"syscall;\n"
: "=a" (result)
: "a" (SYS_WRITE), "D" (STDOUT), "S" (str), "d" (10)
:
);
std::cout << result << endl;
return 0;
}
它打印到控制台“Hello world”并按预期返回10
。
但是,如果我尝试故意出现错误,例如,将9999
设置为文件描述符(不存在):
int main() {
long SYS_WRITE = 0x2000004;
long STDOUT = 1;
long result;
char* str = "Hello world";
__asm__ __volatile__ (
"syscall;\n"
: "=a" (result)
: "a" (SYS_WRITE), "D" (9999), "S" (str), "d" (10)
:
);
std::cout << result << endl;
return 0;
}
返回9
,对应EBADFD
错误,这是正常的,但结果不是负数。我希望错误结果是否定的,在Linux上它是负面的。
在Mac上,我怎么知道syscall
返回了错误?