免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1491 | 回复: 2
打印 上一主题 下一主题

[进程管理] Linux下代码问题求助!(守护进程有关) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-21 23:44 |只看该作者 |倒序浏览
详细问题是:我要做一个C语言可以挂载U盘的程序。。。。就是Linux下移除U盘但还没拔下来,
然后我用这段程序再次加载上去。。。。
但是这个不对。。。我测试了一下。。。。大概在close(i)这几行,但是去掉后达不到效果(不管用)。
错误在哪?这个功能又怎么实现?

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<string.h>
#define MAX 65535
void init_daemon(void)
{
  int pid;
  int i,fds;
  if(pid=fork())
  exit(0); //是父进程,结束父进程
  else if(pid< 0)
  exit(1); //fork失败,退出
  //是第一子进程,后台继续执行
  setsid(); //第一子进程成为新的会话组长和进程组长
  //并与控制终端分离
   
  if(pid=fork())
  exit(0); //是第一子进程,结束第一子进程

  else if(pid< 0)
  exit(1); //fork失败,退出

  //是第二子进程,继续
  //第二子进程不再是会话组长

  chdir("/"); //改变工作目录到/tmp
  umask(0); //重设文件创建掩模
  for(i=0,fds=getdtablesize();i<fds;++i) //关闭打开的文件描述符
{
  close(i);
  printf("fds=%d\n",fds);
}
  printf("RRR\n");//test....
  return;
}
int main()
{
  char *look="fdisk -l | grep ^/dev/sd* > /mnt/.upan"; //????????
  FILE *fp;
  char str[9],str3[2];  
  char *tostr[5];
  int k=0,j=0;
  int i=0;
   

  init_daemon();//初始化为Daemon
  printf("here!\n");//test.....
  while(1)
  {
  //printf("xunhuan\n");
  if(j==0)
  if(system(look)==0)   
  {
  k=0;   
   
  if((fp=fopen("/mnt/.upan","r+"))!=NULL)
  {
  while(!feof(fp))   
  {  
  fgets(str3,2,fp);   
  if(str3[0]=='\n'|| str3[0]=='/')
  {
  if(k==5) break;   
  if(str3[0]=='/')
  fseek(fp,-1L,SEEK_CUR);   
  if(fgets(str,10,fp)!=NULL)   
  {   
  tostr[k]=(char*)malloc(sizeof(char)*10);
  strcpy(tostr[k],str);
  k++;
  }
  }
  }
  fclose(fp);
   
  for(i=0;i<k;i++)
  {
   
  char check[30]="/etc/init.d/mntusb ";
  char str1[30]="mount ",str2[20]=" /mnt/usb";
   
  strcat(check,tostr[i]+5);
  system(check);  
   
  strcat(str1,tostr[i]);
  strcat(str2,tostr[i]+5);
  strcat(str1,str2);   
   
  system(str1);
  free(tostr[i]);
   
  }
  j=1;
   
  } //if
   
  }//if
   
  if(system(look)!=0)  
  j=0;  
   
// printf("THERE\n");
  //sleep(3);   
  }//while
   
return 0;
}

论坛徽章:
0
2 [报告]
发表于 2012-10-23 18:55 |只看该作者
粗略看下,你这不就是system执行一条命令么?为什么搞这么麻烦?

论坛徽章:
0
3 [报告]
发表于 2012-10-23 21:55 |只看该作者
这个是低版本的
在ubuntu10.4就不行
为什么?
回复 2# lenky0401


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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP