在windows 上调用so_学习笔记:系统调用

系统调用(system call)是操作系统为用户提供的服务接口。当应用程序或系统程序需要操作系统完成某项功能服务时,可通过系统调用将其需要的请求传至给内核,内核调用相应的内核函数完成所需的处理,并将处理结果返回给应用程序或系统程序。如果没有系统调用,用户将不可能编写出功能强大的应用程序或系统程序。从这个角度可以认为内核的主体是系统调用的集合,它是一组特殊的公共子程序。系统调用通常是由C...
摘要由CSDN通过智能技术生成

系统调用(system call)是操作系统为用户提供的服务接口。当应用程序或系统程序需要操作系统完成某项功能服务时,可通过系统调用将其需要的请求传至给内核,内核调用相应的内核函数完成所需的处理,并将处理结果返回给应用程序或系统程序。如果没有系统调用,用户将不可能编写出功能强大的应用程序或系统程序。从这个角度可以认为内核的主体是系统调用的集合,它是一组特殊的公共子程序。系统调用通常是由C和C++编写的例程,但某些低级任务(例如,必须直接访问硬件的任务)可能使用汇编语言指令编写。

一个程序在运行时会执行大量的系统调用,下面举一个简单的例子来说明。

例:读一个文本文件,将其输出,其C语言代码如下。

/* 文件名:disp.c*/#include #include int main(){
      FILE *fp;  char c;  if ((fp=fopen("abc.txt","r"))==NULL) {
        printf("File does not exist!\n");    exit(0);  }  while ((c=fgetc(fp))!=EOF) {
        printf("%c",c);  }  fclose(fp);  return 0;}

该程序读当前目录上的文件abc.txt,将其内容输出。假设abc.txt的内容为:abcdef,编译该程序,然后查看该程序运行时会执行哪些系统调用。

07950b0f12c208e9a850b2a61bf6f3a2.png

使用strace命令可以查看disp在运行时执行了哪些系统调用,在上图的命名中,-o disp.log选项可以将程序在运行过程中执行的系统调用记录在disp.log文件中。disp.log文件内容如下。

execve("./disp", ["./disp"], 0x7ffe09e1fde0 /* 63 vars */) &#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值