当前位置:  技术问答>linux和unix

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

    来源: 互联网  发布时间:2015-12-27

    本文导语:  面试中遇到的一个问题: 怎么判断六个exec函数中的某一个,是系统调用,还是通过系统调用实现的普通函数? 我的想法是在一个进程开始,设置ITIMER_VIRTUAL的定时器,比如经过2秒的进程用户时间超时,然后让另外...

面试中遇到的一个问题:

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

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

我的代码如下:

#include 
#include 
#include 
#include 

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 

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

|
呵呵,我是这么测试的,可以写一个很简单的调用exec函数的小程序,得到该程序的进程号,然后,strace -p 进程号,你就会跟踪到该程序的系统调用,然后,我发现,其他exec函数都是调用execve函数的.一般情况下,只有execve是系统调用
怎么用程序测试呢?我就不知道了,期待……

|
呵呵,没有一个是直接调用系统调用,都是有一段用户代码的!只是有个是基础的。
我记得应该 execve是基础的

|
exec函数不管是不是完全的系统调用,但是肯定会用到系统调用。这个面试题觉得没什么意思,有点抠字眼的感觉。

其实我一般是根据man 2 , man 3来区分...

|
直接strace 不就可以了?呵呵。。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 100分悬赏scwcd@Whiz最新完整版!一拿到货,马上付款
  • 重分悬赏!!!哪儿有关于JAVA,JSP的各种对象,方法,属性的详细的中文参考书下载.(140分,分批给)
  • 哪里去找中文的EJB文章?高分悬赏!
  • 有人知道怎么在程序中生成pdf格式的文件吗??高分悬赏!!!!
  • 100分悬赏J@Whiz最新完整版!一拿到货,马上付款!
  • 重金悬赏JPadPro 4.0的注册码!
  • 网卡安装,高分悬赏
  • 高分悬赏:linux如何连接到路由器??
  • 高分悬赏关于hack AIX5.3 vfs 文件系统操作
  • 再悬赏100,要是再没有人,我就疯了。
  • DNS 急!悬赏80分
  • libstdc++-libc6.2-2.so.3:悬赏该文件
  • linux系统下如何监控和获取用户行为(高分悬赏)
  • 下面这个异常是怎么回事?悬赏回答!!!!
  • 悬赏2000元安装ANYQ服务器
  • 重金悬赏,java多线程高手请进
  • 悬赏咨询:Linux虚拟机(VMWare)下如何扩充/home挂载点的大小 ?
  • resin支持连接池吗?为什么我的连接池报错??高分悬赏!!
  • 在linux下用C语言访问、操作mysql数据库(高分悬赏热心人!!!)
  • [悬赏]欢迎提供好的JAVA网站,论坛!分不够另开贴


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3