scuxc 发表于 2012-10-21 23:42

Linux下代码问题求助!(守护进程有关)

详细问题是:我要做一个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,str3;
char *tostr;
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=='\n'|| str3=='/')
{
if(k==5) break;   
if(str3=='/')
fseek(fp,-1L,SEEK_CUR);   
if(fgets(str,10,fp)!=NULL)   
{   
tostr=(char*)malloc(sizeof(char)*10);
strcpy(tostr,str);
k++;
}
}
}
fclose(fp);
   
for(i=0;i<k;i++)
{
   
char check="/etc/init.d/mntusb ";
char str1="mount ",str2=" /mnt/usb";
   
strcat(check,tostr+5);
system(check);
   
strcat(str1,tostr);
strcat(str2,tostr+5);
strcat(str1,str2);   
   
system(str1);
free(tostr);
   
}
j=1;
   
} //if
   
}//if
   
if(system(look)!=0)
j=0;
   
// printf("THERE\n");
//sleep(3);   
}//while
   
return 0;
}

rongpmcu 发表于 2012-10-22 00:09

写个shell脚本更好吧,而且你用c实现,有必要创建daemon进程吗

scuxc 发表于 2012-10-22 12:28

为什么不用守护进程呢?
我想让他一直执行
回复 2# rongpmcu


   

rongpmcu 发表于 2012-10-22 16:04

回复 3# scuxc


    你的目的是: U盘弹出,但是没有手动拔掉,然后后端程序自动挂载? 没完全理解你的意思

scuxc 发表于 2012-10-23 11:38

恩。对的
不过要想高版本的Ubuntu(10.4)那样,可以在桌面生成图表的那种
谢谢你哈!回复 4# rongpmcu


   

rongpmcu 发表于 2012-10-23 19:51

回复 5# scuxc


    那就写个基于dbus的应用程序,然后用支持dbus的udev程序

scuxc 发表于 2012-10-23 21:59

额。。。
可以再具体点吗?
谢谢!!回复 6# rongpmcu


   

rongpmcu 发表于 2012-10-23 22:09

本帖最后由 rongpmcu 于 2012-10-23 22:11 编辑

回复 7# scuxc
我的意思是如果你想要在插拔U盘有事件通知的话,可以考虑dbus,不过也可以考虑下linux下自带的notify机制
我有一篇博客 linux下新硬盘的自动检测及格式化--支持硬盘的热插拔处理用到了notify机制

   

scuxc 发表于 2012-10-23 23:01

哦。。。。
好的,我现在还在学习中,问题可能比较simple哈!麻烦你了!
回复 8# rongpmcu


   

dragon1846 发表于 2012-11-08 21:11

studyddddd
页: [1]
查看完整版本: Linux下代码问题求助!(守护进程有关)