linux下写个了简单模仿cp命令的程序,问题大大 求救 我实在不知道哪儿出问题了 求大神赐教

#include<stdio.h>#include<unistd.h>#include<fcntl.h>#include<limits.h>intmy_cp(constc... #include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <limits.h>

int my_cp(const char *pathname1,const char *pathname2);

int main(int argc, char *argv[])
{
if(argc != 3)
{
printf("usage:./mycp pathname1 pathname2\n");
exit (1);
}

my_cp(argv[1],argv[2]);

exit (1);

}
/*a function like cp*/
int my_cp(const char *pathname1,const char *pathname2)
{
int fd,fd_new,read_nbytes,write_nbytes;
char *buf;

/*oepn the file*/
if(fd = open(pathname1,O_RDWR ) == -1)
{
printf("Open Error!\n");
exit (1);
}

/*read the file*/
if(read_nbytes = read(fd,buf,SSIZE_MAX) == -1)
{
printf("Read Error!\n");
exit (1);
}

/*creat a file that contains the datas of the old one*/
if(fd_new = open(pathname2,O_RDWR | O_CREAT,O_RDWR) == -1)
{
printf("Creat Error!\n");
exit (1);
}

/*write datas into the new file*/

if(write_nbytes = write(fd_new,buf,SSIZE_MAX))
{
printf("Write Error!\n");
exit (1);
}

}
展开
 我来答
815hu0i
2011-02-24 · TA获得超过2755个赞
知道小有建树答主
回答量:798
采纳率:0%
帮助的人:213万
展开全部
cp命令
该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大。

语法: cp [选项] 源文件或目录 目标文件或目录

说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。

该命令的各选项含义如下:

- a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。

- d 拷贝时保留链接。

- f 删除已经存在的目标文件而不提示。

- i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。

- p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。

- r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。

- l 不作拷贝,只是链接文件。

需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。

例子:
Cp -i file1 file2 (将文档 file1 复制成 file2 . –i为提示确认。)

cp file1 dir1 将文档 file1 复制到目录 dir1 下,文件名仍为 file1.

cp /tmp/file1 . 将目录 /tmp 下的文档 file1复制到现行目录下,档名仍为 file1.

cp /tmp/file1 file2 将目录 /tmp 下的文档 file1现行目录下,档名为file2

cp -r dir1 dir2 (recursive copy) 复制整个目录.若目录 dir2 不存在,则将目录dir1,及其所有文档和子目录,复制到目录 dir2 下,新目录名称为dir1.若目录dir2不存在,则将dir1,及其所有文档和子目录,复制为目录 dir2.

参考资料: 百度一下

麦蒂大灌篮
2011-02-25 · 超过10用户采纳过TA的回答
知道答主
回答量:24
采纳率:0%
帮助的人:0
展开全部
看看你定义的 char *buf;
只定义一个指针,没有分配内存,怎么读取到东西呢??而且指针乱指怎么行呢?

还有你怎么确定文件的大小呢?
应该用一个循环来读取和写入啊! 利用read读取返回值为实际读到的数据字节数!
char buf[1024];
do{
read_nbytes = read( fd, buf, 1024 ); / * 读取多少就写入多少*/
write (fd_new, buf, read_nbytes );
}while( read_nbytes == 1024 )
大概的模式就这样!错误检查就你自己写了
追问
谢谢
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-02-24
展开全部
SSIZE_MAX不一定的吧?要确定下是多少
追问
我自己的想法是用SSIZE_MAX尽量把文件的数据读完
我编译之后运行就没反应了 只能用Ctrl+Z来结束 完全没达到我的初衷
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式