LinuxSir.cn,穿越时空的Linuxsir!

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

关于添加系统调用的问题:请教高手

[复制链接]
发表于 2005-4-3 13:27:50 | 显示全部楼层 |阅读模式
我在我的系统(红旗4.1)里添加了一个简单的复制文件的系统调用。
/usr/src/linux/kernel/sys.c 里面加的系统调用函数如下:

asmlinkage int sys_copyfile(char *fromfile,char *tofile,char *buffer)
{
   int BUFFER_SIZE=10;
   int from_fd,to_fd;
   int bytes_read,bytes_write;  
   char *ptr;
   if((from_fd=sys_open(fromfile,O_RDONLY,0644))==-1)
   {
       printk("Open source file error !\n");
       sys_exit(-1);
   }
   if((to_fd=sys_open(tofile,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
   {
       printk("Open destination file  error !\n");
       sys_exit(-1);
   }
   while(bytes_read=sys_read(from_fd,buffer,BUFFER_SIZE))
   {
       if(bytes_read==-1) break;
       else if(bytes_read>0)
       {    ptr=buffer;
            while(bytes_write=sys_write(to_fd,ptr,bytes_read))
            {
                 if(bytes_write==-1)break;  
                 else if(bytes_write==bytes_read) break;  
                     else if(bytes_write>0)
                     {    ptr+=bytes_write;
                          bytes_read-=bytes_write;
                     }
            }  
            if(bytes_write==-1)break;
       }
   }
   sys_close(from_fd);
   sys_close(to_fd);
   return 0;
}
我这个系统调用添加是成功的,编译完成后进入新内核,对它的调用也是对的
我编的调用函数如下:
#include <linux/unistd.h>
#include <stdio.h>
#define  __NR_copyfile 254
_syscall3(int,copyfile,char *,fromfile,char *,tofile,char *,buffer)

int main(int argc,char **argv)
{
    char buffer[10];
    if(argc!=3)
    {
      printf("Usage: %s fromfile tofile\n",argv[0]);
      return 1;
    }  
    copyfile(*(argv+1),*(argv+2),buffer);
    return 0;
}
结果我运行可执行文件./syscall fromfile tofile后,如果fromfile是存在的话调用成功。
可是如果fromfile不存在,就死机了。我觉得这是我系统调用函数的问题。请高手帮忙解决
急 在线等
发表于 2005-4-4 20:28:05 | 显示全部楼层
if((from_fd=sys_open(fromfile,O_RDONLY,0644))==-1)

该是这出问题吧,你是以只读方式打开的,所以,碰到没这个文件的时候,系统会出错!
回复 支持 反对

使用道具 举报

发表于 2005-4-4 20:29:19 | 显示全部楼层
随便问句,你是哪个班的 ?
回复 支持 反对

使用道具 举报

发表于 2005-4-4 21:44:37 | 显示全部楼层
if((from_fd=sys_open(fromfile,O_RDONLY,0644))==-1)

0644 因该是0吧
回复 支持 反对

使用道具 举报

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

本版积分规则

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