LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 692|回复: 3

很基础的问题,请教一下!

[复制链接]
发表于 2005-9-6 14:25:23 | 显示全部楼层 |阅读模式
我现在要写一个程序,从网络接收“命令”,然后根据事先约定的协议根据“命令”去做一些事情。但执行命令需要时间,有可能这个命令还没执行完下一个命令又到了。
    所以我的想法是用一个“任务队列”保存接收的命令。而程序则专门去那个队列里查找需要执行的命令,执行后就把这个命令从队列里删除。
    问题是这样的话是不是要专门vfork(环境是uClinux)一个进程去不停地等待接收命令(会是一个while(1)+select循环),这样在uClinxu下不知道是否可行,父进程还能不能继续执行?如果可行,另一个问题是这个队列怎样在父子进程之间共享同步。
    基础很差,请赐教啊!
 楼主| 发表于 2005-9-6 14:45:23 | 显示全部楼层
好像不行啊!我做了下面这个程序测了一下,结果不仅父进程不输出,而且所有的别的程序都被堵住了。可人家boa是怎么做到的呢?看了半天没看懂!

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>

  5. int main(int argc, char **argv)
  6. {
  7.     pid_t pid;
  8.     int count = 0;
  9.     pid = vfork();
  10.     if(0 == pid){
  11.                 while(1){
  12.                         count++;
  13.                         sleep(1);
  14.                 }
  15.     }
  16.     while(1){
  17.                 printf("%d\n",count);
  18.                 sleep(1);
  19.         }
  20.     return 0;
  21. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-9-6 17:43:00 | 显示全部楼层
老弟,这样根本就不行,vfork制造出的子进程和父进程共享内存,同一个空间,只有一个能运行,你可以
if(0 == pid){}调用 exec(),执行你的程序,这样就可以了,至于同步你可以看一下手册,我就不多说了,
有空看看我的网站 www.myembed.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-7 21:16:36 | 显示全部楼层
用struct timval timeout将就一下算了,至少这样比较安全
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表