精华 C/C++ ---- 005

本帖由 胡说之2003-12-08 发布。版面名称:电脑技术

  1. 胡说之

    胡说之 Moderator ID:5

    注册:
    2002-01-17
    帖子:
    5,203
    支持:
    4
    声望:
    0
    金钱:
    $187
    你误解了.我是指chuhuili的code直接在main里面自杀,没有用fork.这跟你用子进程有本质区别.不是指该用个remove or unlink.

    另外"谋杀亲爹"是搞笑的说法,不是严格的技术意义上的杀父进程,我明白你的程序.Good job :cool:

    TO马甲甲:
    kill itself,这是个比较模糊的说法.

    Are you sure, that after running your code, the executable file is removed from the file system? Please clerify, thanks.
     
  2. majia041

    majia041 新手上路 ID:6647

    注册:
    2003-04-14
    帖子:
    107
    支持:
    0
    声望:
    0
    金钱:
    $13,980
    程序运行后会把那个可执行文件删除。
    我另外有个问题,如果我们不用UNLINK函数,那怎么做?
     
  3. 胡说之

    胡说之 Moderator ID:5

    注册:
    2002-01-17
    帖子:
    5,203
    支持:
    4
    声望:
    0
    金钱:
    $187
    谢谢shusheng兄指正.

    在我的系统里,用unlink, remove的结果是一样的.

    现在我来猜测什么是这道题的考点;

    1. 考察你是否知道用子进程的特点.

    或者

    2. 考察你是否知道argv[0]就是executable file本身.

    如果说是2的话,未免太过简单了.而且马甲甲的程序在windows(也是符合POSIX的 :D )里面行不通,要用DPFF的CODE
     
  4. 马甲甲

    马甲甲 谁还没个马甲 ID:6080 VIP

    注册:
    2003-03-24
    帖子:
    282
    支持:
    142
    声望:
    153
    金钱:
    $16,921
    kill process 比较合适,这儿用得的确不好。
    After running the toy, it is removed from file system.
    Someone mentioned it works on HP, but mine does not, I think it also depends on which verison. (complicated?)
     
  5. 马甲甲

    马甲甲 谁还没个马甲 ID:6080 VIP

    注册:
    2003-03-24
    帖子:
    282
    支持:
    142
    声望:
    153
    金钱:
    $16,921
    校长鼓动"谋杀亲爹"&"suicide"

    :eek:
    :D :D :D
     
  6. 胡说之

    胡说之 Moderator ID:5

    注册:
    2002-01-17
    帖子:
    5,203
    支持:
    4
    声望:
    0
    金钱:
    $187
    在子进程里:
    --------------

    sprintf(cmd, "rm %s", argv[0]);
    system(cmd);

    --------------

    不知是否行得通.
     
  7. 胡说之

    胡说之 Moderator ID:5

    注册:
    2002-01-17
    帖子:
    5,203
    支持:
    4
    声望:
    0
    金钱:
    $187
    回shusheng:

    unlink在我的cygwin里是合法的,只是用在chhuili的code里面时return code是-1.

    所以,这并不能说明我的系统不合POSIX标准.我从NASA那里下载的系统,应该说是比较成熟的.(当然了,现在航天飞机老往下摔,我用NASA的东西是有一点底气不足 :D )
     
  8. majia041

    majia041 新手上路 ID:6647

    注册:
    2003-04-14
    帖子:
    107
    支持:
    0
    声望:
    0
    金钱:
    $13,980
     
  9. majia041

    majia041 新手上路 ID:6647

    注册:
    2003-04-14
    帖子:
    107
    支持:
    0
    声望:
    0
    金钱:
    $13,980
     
  10. 胡说之

    胡说之 Moderator ID:5

    注册:
    2002-01-17
    帖子:
    5,203
    支持:
    4
    声望:
    0
    金钱:
    $187
     
  11. majia041

    majia041 新手上路 ID:6647

    注册:
    2003-04-14
    帖子:
    107
    支持:
    0
    声望:
    0
    金钱:
    $13,980
    谢谢了
     
  12. shusheng

    shusheng CFC 分析员 ID:9508 VIP

    注册:
    2003-07-10
    帖子:
    9,880
    支持:
    445
    声望:
    193
    金钱:
    $58,251
    可不可以加一个perror()看看返回的是什么错 ?

    如果你vi /tmp/foo,让他开着,在另一个窗口里rm -f /tmp/foo, ls -l /tmp/foo会有什么结果?
     
  13. shusheng

    shusheng CFC 分析员 ID:9508 VIP

    注册:
    2003-07-10
    帖子:
    9,880
    支持:
    445
    声望:
    193
    金钱:
    $58,251
    直接在父进程里:

    execl("rm", "/bin/rm", argv[0], NULL);

    :D
     
  14. 胡说之

    胡说之 Moderator ID:5

    注册:
    2002-01-17
    帖子:
    5,203
    支持:
    4
    声望:
    0
    金钱:
    $187
    I got error message:

    Permission denied
     
  15. majia041

    majia041 新手上路 ID:6647

    注册:
    2003-04-14
    帖子:
    107
    支持:
    0
    声望:
    0
    金钱:
    $13,980
    there r some errors in this program, but i can't tell what they r. just kind of feeling.
     

分享此页面

扫描下面的二维码分享到微信!
http://bbs.comefromchina.com/threads/182115/page-3