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
...全文
353 9 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
确实有难度
yanghuajia 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是系统调用
怎么用程序测试呢?我就不知道了,期待……

23,125

社区成员

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

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