您的位置:程序门 -> linux/unix社区 -> 程序开发区



请教下一个简单的linux程序


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


请教下一个简单的linux程序[已结贴,结贴人:xiaomaoqiqi]
发表于:2007-10-19 10:51:10 楼主
下面这个liunx程序我能编译通过。。但是在运行的时候出现了段错误。请问下是哪里出了问题了啊?

请大家给我说哈啊。。谢谢了。。。
#include <sys/types.h>
#include <stdio.h>
#include <sys/stat.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#define   buffer_size   1024
                                                                                                                                                               
int   copy(int   argc,char   **argv)
      {
        int   from_fd,to_fd;                                                                                                          
        int   bytes_read,bytes_write;
        char   buffer[buffer_size];
        char   *ptr;
        if(argc!=3)
        {
                fprintf(stderr,"usage:%s   fromfiletofile\n\a",argv[0]);
                exit(1);
      }
  if((from_fd=open(argv[1],o_rdonly))==-1)
        {
            perror("open   error!");
    exit(1);
        }
if((to_fd=open(argv[2],o_wronly ¦o_creat,s_irusr ¦s_iwusr))==-1)
        {
              perror("open   error!");
                exit(1);
        }
while(bytes_read=read(from_fd,buffer,buffer_size))
                                                                                                                                                               
        {
      if((bytes_read==-1)&&(errno!=eintr))   break;
    else   if(bytes_read> 0)
      {
                ptr=buffer;
while(bytes_write=write(to_fd,ptr,bytes_read))
{
if((bytes_write==-1)&&(errno!=eintr))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;
}
}
                                                                                                                                                               
}
                                                                                                                                                               
int   sum()
{
int   i,   ji=1;
for(i=1;i <=50;i++)
{ji=ji*i;}
printf("%d\n",ji);
}
                                                                                                                                                               
int   main(int   argc   ,char**   argv)
{
        int   start=time((time_t   *)null);
        printf("time   start:%d\n",start);
copy(argv[1],argv[2]);
//off_t   lseek(espipe,0,seek_end)
{
open(argv[2],o_rdwr);
sum();
}                  
发表于:2007-10-19 14:03:551楼 得分:80
while(bytes_read=read(from_fd,buffer,buffer_size))
                                                                                                                                                               
        {
      if((bytes_read==-1)&&(errno!=eintr))   break;
    else   if(bytes_read   > 0)
      {
                ptr=buffer;
                while(bytes_write=write(to_fd,ptr,bytes_read))       //如果想简单修改,此处的while换成if就可以了。
                    {
                        if((bytes_write==-1)&&(errno!=eintr))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;
            }  
           
           
           
  你这样写能不出错?读一次,一直不停的写,ptr指针往后移,超过了buf的长度,溢出。
 
  再说,你的copy是干什么用的?如果仅仅是拷贝一个文件,不用这样写吧。
发表于:2007-10-20 10:13:532楼 得分:20
段错误一般都是越界了。


快速检索

最新资讯
热门点击