- 论坛徽章:
- 0
|
详细问题是:我要做一个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;
} |
|