100分悬赏一个问题,有一定难度

koolfool 2006-11-28 05:49:40
面试中遇到的一个问题:

怎么判断六个exec函数中的某一个,是系统调用,还是通过系统调用实现的普通函数?

我的想法是在一个进程开始,设置ITIMER_VIRTUAL的定时器,比如经过2秒的进程用户时间超时,然后让另外一个exec不断调用自己,如果这个exec是系统调用的话,那么进程的用户时间就永远不会增加,那么这个定时器也就永远不会产生SIGVTALRM信号,反之,如果过一段时间超时,那么就说明这个exec不是系统调用了。但是,实验结果是6个exec都会超时,这是为什么?难道我的系统实现中6个exec都不是系统调用?如果是我的方法有问题,那么到底怎样才能判断它是不是系统调用那?请高人指点...

我的代码如下:

#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <sys/time.h>

int main()
{
struct itimerval value;

value.it_value.tv_sec=2;
value.it_value.tv_usec=0;
value.it_interval=value.it_value;
setitimer(ITIMER_VIRTUAL,&value,NULL);
execl("./callself","callself",NULL);
perror("Failed to execl");
return 1;
}

callself只是不断地调用自己,代码如下

#include <unistd.h>

int main(int argc,char **argv)
{
execl("./callself","callself",NULL);
//execle("./callself","callself",NULL,NULL);
//execlp("./callself","callself",NULL);
//execv("./callself",&argv[0]);
//execve("./callself",&argv[0],NULL);
//execvp("./callself",&argv[0]);
perror("Failed to exec");
return 1;
}

我的系统是FC3,gcc版本是3.4.2
...全文
358 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
koolfool 2006-12-01
  • 打赏
  • 举报
回复
hu_zy(白痴一个) ( )

有办法用代码测试么?
hu_zy 2006-12-01
  • 打赏
  • 举报
回复
直接strace 不就可以了?呵呵。。
bobya2003 2006-11-30
  • 打赏
  • 举报
回复
mark
koolfool 2006-11-30
  • 打赏
  • 举报
回复
to zhaodm(从开始到现在)

你说的方法可行,等着接分吧!
不过我也想知道有没有办法用程序来测试,3天之后结帖,想要分的快来吧!
bywind1980 2006-11-29
  • 打赏
  • 举报
回复
确实有难度
  • 打赏
  • 举报
回复
呵呵,没有一个是直接调用系统调用,都是有一段用户代码的!只是有个是基础的。
我记得应该 execve是基础的
hqx8211 2006-11-29
  • 打赏
  • 举报
回复
exec函数不管是不是完全的系统调用,但是肯定会用到系统调用。这个面试题觉得没什么意思,有点抠字眼的感觉。

其实我一般是根据man 2 , man 3来区分...
baymoon 2006-11-29
  • 打赏
  • 举报
回复
我不明白的是为什么要做这种区分呢?如果是自己写代码,那很清楚是不是系统调用;如果是读别人的代码,那grep一下他的所有代码再简单分析代码结构即可知道是自定义的还是系统调用的了;
zhaodm 2006-11-29
  • 打赏
  • 举报
回复
呵呵,我是这么测试的,可以写一个很简单的调用exec函数的小程序,得到该程序的进程号,然后,strace -p 进程号,你就会跟踪到该程序的系统调用,然后,我发现,其他exec函数都是调用execve函数的.一般情况下,只有execve是系统调用
怎么用程序测试呢?我就不知道了,期待……
本资源是一个基于微信小程序的悬赏信息发布系统,采用Java编程语言进行开发。该系统旨在为用户提供一个便捷、高效的平台,让他们能够轻松地发布悬赏任务并吸引志愿者参与。系统的主要功能包括:用户注册与登录:用户可以通过手机号码或微信账号进行注册和登录,以便在平台上发布和管理悬赏任务。发布悬赏任务:用户可以创建新的悬赏任务,设置任务标题、描述、截止日期等信息。同时,用户还可以选择任务的难度级别和奖励金额。查看悬赏任务:其他用户可以在平台上浏览已发布的悬赏任务,了解任务详情和要求。此外,他们还可以对感兴趣的任务进行报名参与。提交任务完成情况:一旦志愿者完成任务,他们需要将任务完成情况报告给发布者。发布者可以查看报告并给予相应的奖励。资金管理:系统支持实时查看和处理悬赏任务的资金流转,确保奖励能够及时发放给合适的参与者。为了提高系统的安全性和稳定性,我们采用了以下技术方案:使用Spring Boot框架进行后端开发,实现RESTful API接口;采用MySQL数据库存储数据;前端采用微信小程序框架进行开发,利用微信提供的API实现与后端的数据交互;对关键数据进行加密处理,确保数据的安全性;对系统进行性能优化,提高响应速度和用户体验。通过这个基于微信小程序的悬赏信息发布系统,用户可以方便地发布和管理悬赏任务,吸引志愿者参与。同时,发布者可以实时了解任务进度和奖励发放情况,提高工作效率。

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧