当前位置:  技术问答>linux和unix

!SUN的一道面试题,如何用程序实现支持通配符的文件及文件夹拷贝

    来源: 互联网  发布时间:2015-09-17

    本文导语:  cp命令是linux下面的文件拷贝命令。现在要自己写一个C/C++程序来实现cp命令的功能,同时还要增强:一来要能支持路径拷贝,包括多级目录拷贝;二来要支持通配符拷贝。 大家帮忙给点思路,我想知道linux的文件组织...

cp命令是linux下面的文件拷贝命令。现在要自己写一个C/C++程序来实现cp命令的功能,同时还要增强:一来要能支持路径拷贝,包括多级目录拷贝;二来要支持通配符拷贝。

大家帮忙给点思路,我想知道linux的文件组织用的是什么样的数据结构,到时候好来实现这个程序。多谢各位啦!小弟送大分!

|
#define DIRCREATEMOD S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IWOTH|S_IXOTH
int file_copy(src,dest)
char *src;
char *dest;
{
FILE *fp=NULL;
int nsuccess;
char block[1024];
struct stat Judge;
int in=0;
int out=0;
int  nread;
strcpy(source,src_file);
strcpy(dest,dest_file);
in=open(source,O_RDONLY);
out=open(dest,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
if(-1==out)
{
fp=fopen(dest,"w+");
if(fp==NULL)
{
goto ERROR_PROC;
}
else 
{
fclose(fp);
fp=NULL;
}

}
out=open(dest,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
if(-1==out)
{
goto ERROR_PROC;
}
do
{
nread=read(in,block,sizeof(block));
if(nread>0)
{
write(out,block,nread);
}
}while(nread>0);
nsuccess=remove(source);
if(nsuccess)
{
goto END_OF_FUNC;
}
ERROR_PROC:
return(0);
END_OF_FUNC:
return(1);
}
int s_file_copy(dir_src, dir_dest)
char* dir_src ;
char* dir_dest ;
{
DIR *dp = NULL ;
int rc = NG ;
int rtn = NG ;
int flag = 0 ;
struct stat statbuf ;
struct stat destbuf ;
struct dirent *entry = NULL ;
char dest_file_name[MAXSIZE+1] ;
char src_file_name[MAXSIZE+1] ;
char dir_recursion[MAXSIZE+1] ;

if( ( dp = opendir( dir_src ) ) == NULL ) {
goto ERROR_PROC ;
}
while( ( entry = readdir( dp ) ) != NULL) {  
rc = NG ;
sprintf( src_file_name, "%s/%s", dir_src, entry->d_name ) ;
lstat( src_file_name, &statbuf ) ;
if( S_ISDIR( statbuf.st_mode ) ) {
if( strcmp( ".", entry->d_name ) == 0 || strcmp( "..", entry->d_name ) == 0 ) {
rc = OK ;
continue ;
}
sprintf( dir_recursion, "%s/%s", dir_dest, entry->d_name ) ;
rc= stat( dir_recursion, &statbuf ) ;
if( rc != OK ) {
rc = mkdir(dir_recursion, DIRCREATEMOD ) ;
if( rc != OK ) {
break ;
}
}
rc = s_file_copy( src_file_name, dir_recursion) ;
if( rc != OK ) {
break;
}
} else if( S_ISREG( statbuf.st_mode ) ) {
sprintf( dest_file_name, "%s/%s", dir_dest, entry->d_name ) ;
rc = file_copy( src_file_name, dest_file_name   ) ;
if( rc != OK ) {
break ;
}
}
rc = OK ;
}

ERROR_PROC:
if( dp != NULL ) {
closedir( dp ) ;
dp = NULL ;
}
return( rc ) ;
}
我以前的做项目时写的,我修改了很多地方,要不被公司发现了就完了,呵呵
你自己处理一下统配符吧,不太麻烦

|
http://www.kingbrand.net/getbible/linux/a9.htm

|
用什么数据结构不太清楚,离要是很有兴趣的话,可以看内核啊
不过Linux提供文件目录函数,像opendir,readdir等应该可以满足离的要求了。

|
文件的Inode里维护着文件地址指针,直接操作指针即可.

|
http://www.lslnet.com/linux/docs/linux-3880.htm
说起来简单,做起来很难.

|
用readdir,得到每个文件名,然后与通配符相比较,比较成功,拷贝,比较失败,转到下一个。
关键是通配符算法,比较麻烦,不过幸好网上有现存的。我可以到网上搜索一下。“regex.c”,应该可以找到。

    
 
 

您可能感兴趣的文章:

  • SUN虚拟机存储物理地址和网卡名称的文件是什么?
  • sun.jdbc.rowset.*;在哪个jar文件里面呀
  • 怎样在Sun OS 操作系统删除目录下的文件及子目录
  • 那里有xml.jar文件下载.包含com.sun.xml.*
  • 新手问题:Sun的JDK下载文件是叫做j2sdk-1_3_1_01-win.exe吗
  • 从SUN公司的网站上下载一个Solaris10的VMWare虚拟机映像文件,登录系统的时候的用户名和密码是什么?
  • 请问各位:我用SUN公司的JAXP开发包解析XML文档,可不知道对XML解析后如何将结果写回文件中。请各位熟悉Java和XML的高手帮忙。
  • Sun Java2 SDK 的例子中有 *.jar文件,是什么类型的文件?双击还可以执行它
  • 在www.sun.com.cn下载的jade是个setup.class文件,怎么用?
  • 请问sun有没有提供一个直接能把整个xml文件中的所有元素都读出的方法????
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于sun的新操作系统jds(sun.java.desktop.system)3d显示的问题
  • SUN新拿出的SUN ONE 具体是一个什么东西,包括什么内容?
  • import com.sun.java.swing.*;提示找不到com.sun.java包我该怎么办?急!
  • 考过SCJP后要过多久才能在 www.galton.com/~sun/ 查到自己的资料啊?(SUN的工作效率好低,已经一周了)
  • java/j2ee iis7站长之家
  • Oracle高级官员回答Sun雇员的问题
  • 求助 socket服务端 sun_pah被占用
  • 谁有Sun Java2认证考试资料?谢谢
  • 那为大下给解释一下sun的几种认证。
  • 请问如何使用sun的java帮助。
  • 哪里有java的类库下载?sun里有吗?
  • 一个关于SUN认证的问题
  • 一个是SUN JDK一个是MS JDK,怎么回事吗?
  • 怎样查看sun solaris系统硬盘大小,急!!!
  • sun的v880机器上能安装windows系统吗?
  • 学Sun Studio,送手机充值卡
  • SUN虚拟机查询MAC地址用什么命令??、
  • 问下sun的服务器是不是只能安装solaris
  • SUN Java System Message Queue
  • 有Oracle罩着你也没用:Sun涉嫌商业贿赂


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3