大佬教程收集整理的这篇文章主要介绍了为什么Linux系统调用返回类型“long”?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
asmlinkage long sys_getpid(void)
他进一步说:
他不会比这更深刻,我不能完全理解为什么会这样.为什么要使用与32位和64位系统相关的长期关系?为什么我们不能返回一个简单的int?
例如,在Linux / x86-64系统上编译并运行以下程序:
#include<stdio.h> #include<stdint.h> int main () { printf ("sizeof(int)=%d\n",(int) sizeof (int)); printf ("sizeof(intptr_t)=%d\n",(int) sizeof (intptr_t)); printf ("sizeof(short)=%d\n",(int) sizeof (short)); printf ("sizeof(long)=%d\n",(int) sizeof (long)); printf ("sizeof(long long)=%d\n",(int) sizeof (long long)); printf ("sizeof(void*)=%d\n",(int) sizeof (void *)); return 0; }
在我的系统上使用gcc -Wall s.c -o编译并在我的Debian / Sid / x86-64(i3770k处理器,GCC 4.8.2)上运行./s:
sizeof(int)=4 sizeof(intptr_t)=8 sizeof(short)=2 sizeof(long)=8 sizeof(long long)=8 sizeof(void*)=8
在32位模式下使用gcc -m32 -Wall s.c -o s32编译并运行./s32:
sizeof(int)=4 sizeof(intptr_t)=4 sizeof(short)=2 sizeof(long)=4 sizeof(long long)=8 sizeof(void*)=4
如果使用gcc -mx32 -O3 -Wall s.c -o sx32编译x32,我得到相同的输出!
BTW,也许更好的问题是为什么不使用intptr_t ….我不知道(可能是一个习惯问题; when Linus首先开始编写他的内核,C99标准定义< stdint.h>和intptr_t-不存在).
阅读更多关于ABIs,特别是仔细阅读X86-64 ABI(另见x32 ABI …)和x86 calling conventions的wikipage.
以上是大佬教程为你收集整理的为什么Linux系统调用返回类型“long”?全部内容,希望文章能够帮你解决为什么Linux系统调用返回类型“long”?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。