|
|
我在我的系统(红旗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不存在,就死机了。我觉得这是我系统调用函数的问题。请高手帮忙解决
急 在线等 |
|