Linux下C语言实现文件拷贝
/*
Function: file from file1 to file2
How to execute: ./file file1 file2 (under Linux)
Data:2007-05-09
*/
#include <stdio.h> /*fprintf(),stderr,BUFSIZ*/
#include <stdlib.h> /**/
#include <string.h> /*stderror()*/
#include <fcntl.h> /*open(),flag*/
#include <errno.h> /*errno*/
#include <unistd.h> /*ssize_t*/
#include <sys/types.h>
#include <sys/stat.h> /*mode_t*/
#define BUFFER_SIZE 3
int main(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 fromfile tofile\n\a",argv[0]);
exit(1);
}
/* 打开源文件 */
if((from_fd=open(argv[1],O_RDONLY))==-1) /*open file readonly,返回-1表示出错,否则返回文件描述符*/
{
fprintf(stderr,"Open %s Error:%s\n",argv[1],strerror(errno));
exit(1);
}
/* 创建目的文件 */
/* 使用了O_CREAT选项-创建文件,open()函数需要第3个参数,
mode=S_IRUSR|S_IWUSR表示S_IRUSR 用户可以读 S_IWUSR 用户可以写*/
if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
{
fprintf(stderr,"Open %s Error:%s\n",argv[2],strerror(errno));
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;
}
}
close(from_fd);
close(to_fd);
return;
}
⑵ 求linux下复制文件到其他目录的c语言库函数
这个不知道有没有,可以使用system函数执行shell命令复制
如:system("cp /home/file1 /root/file2");
另外楼上们说的fread、fwrite等函数都可能因为回文件太大无法在内存答展开而失败。
⑶ C语言,如何复制文件
调用系统函数是以字符串方式保存的,而非二进制。(因为dos\linux命令行下二进制编码无专意义)
所以system()一定不满足你的要属求。
可以使用c的IO函数达到你想要的目的
以下是简要说明,不考虑出错等问题:
所有IO函数包含在stdio.h中(linuxC是,turboc应该也是吧,忘了)
1、定义源文件和目标文件指针FILE *fp_source,*fp_target
2、声明一个程序内数据存放区如char buffer[100],或调用malloc函数
3、用fp_source = fopen()打开源文件文件
4、用fp_target = fopen()打开目标文件
5、
while(feof(fp_source) == 0)//利用循环复制直到源文件尾
{用fread()将源文件内容读入程序buffer
用fwrite()将buffer内容写入目标文件
}
6、别忘了close()关闭源\目标文件
7、各函数使用方法请自行查询,不赘述。
没有写全源码,但希望这条思路对你有帮助。
⑷ linux中的复制粘贴快捷键
Linux下复制粘贴快捷键
1. 在控制台下:
1.1、鼠标选中要复制的文本,按鼠标中键,即为复制
或者
1.2、复制命令:Ctrl + Insert 组合键或用鼠标选中即是复制。
粘命令:Shift + Insert 组合键或单击鼠标滚轮即为粘贴。
2. 在终端下:
复制命令:Ctrl + Shift + C 组合键.
粘贴命令:Ctrl + Shift + V 组合键.
3. vim或命令行下:
鼠标左键选中即为复制, 按下中键(鼠标滚轮)即为粘贴。
在命令行里,鼠标左键复制,按着左键开始选你想要复制的内容(背景是黑的,字是白的,灰色的框就是你选中的内容),然后再把左键松开,放到其他地方,点右键,松开,这样就粘贴好了。
⑸ linux下用简单c语言代码怎么实现实现文件夹所有内容的复制
||#include <sys/stat.h>
#include <unistd.h>
// 目录
int isdir(char *path)
{
struct stat buf;
int cc;
cc=stat(path,&buf);
if(!cc && (buf.st_mode & S_IFDIR)) return(1);
return(cc);
}
// 可读普通文件
int isrfile(char *path)
{
struct stat buf;
int cc;
int euid,egid;
cc=stat(path,&buf);
if(!cc) {
if((buf.st_mode & S_IFMT) != S_IFREG) return 0;
euid=geteuid();
egid=getegid();
if(euid==0) {
if(buf.st_mode & S_IRUSR || buf.st_mode & S_IRGRP ||
buf.st_mode & S_IROTH)
return 1;
else return 0;
}
if((buf.st_mode & S_IROTH)!=0) return 1;
if((buf.st_gid == egid) && ((buf.st_mode & S_IRGRP)!=0))
return 1;
if((buf.st_uid == euid) && ((buf.st_mode & S_IRUSR)!=0))
return 1;
}
return cc;
} 【江西新华】
⑹ 怎样用C语言将文件复制另外的文件夹
有两种方式可以实抄现复制:
一、自袭行编写函数,实现复制。
算法流程如下:
1
以读的方式打开源文件,以写的方式打开目标文件;
2
每次读一个字节,并写到目标文件中,直到达到文件结尾为止;
3
关闭两个文件。
二、调用系统命令。
stdlib.h中的system函数,可以执行系统命令行支持的命令。
int
system(char
*cmd);
调用时就是执行cmd中的指令。
1
对于windows,就是执行dos命令,可以调用
system("
/Y
src_file
target_dir");
其中src_file为源文件,而target_dir就是目标文件夹。
2
对于Linux,需要执行shell命令cp,如下
system("cp
src_file
target_dir");
⑺ 如何将linux中的c语言复制出来
文件保存到U盘就可以。也可以通过网络共享。
⑻ 在Linux系统系下vi操作中C语言编程,如何进行复制粘贴求救!
YY可以但是不准确,用起来比较麻烦,用鼠标选中然后复制就可以了,粘帖的时候也用鼠标也可以但粘帖我一般是按shift+insert,比较快捷方便,复制就只能用鼠标了,没有快捷键
⑼ linux如何复制文件
linux系统使用cp命令即可将一个文件夹里面的文件复制到另外一个文件夹里面。
这个命令相当于dos下面的命令,具体用法是:cp_r源文件目的文件,其中参数r是指连同源文件中的子目录一同拷贝。../ 和 ./ 代表的 是上级目录以及当前目录。使用时的两种情况:
1、处在当前目录复制当前目录下文件到别的目录:cp文件名称别的文件目录路径
例如,在orz文件夹下有两个子文件夹a和b,a中有文件x.c,b中无文件。此时我们在a文件夹中命令如下:cpx.c../b/。
2、处在当前文件夹下复制另外文件夹下的文件到当前文件夹下:cp路径/文件名称./例如和上面例子一样,命令如下:cp../a/x.c./。
(9)linuxc语言文件复制扩展阅读:
Linux系统复制错误文件要删除的命令:
命令RM是用来删除文件的,与DOS下的RM(删除一个空目录)是不同的,应该注意。对于rm命令有三个常见的参数:-i、-r和-f。例如,您想删除名为Test:Rm-ITest的文件
系统会问:RM:删除测试?Y,文件将不会被删除,直到你按回车。这样做的原因是Linux没有像DOS恢复删除命令,或者你可以使用pcTool和其他工具来保存删除文件,删除文件在Linux中不能得救,因此有必要使用这个参数删除之前让你再次确认。
⑽ Linux复制文件用什么命令怎么用
Linux中最常用命令之一就是cp了,用于复制文件夹或文件。下面由我为大家整理了Linux系统复制文件夹命令cp使用详解,希望对大家有帮助!
Linux系统复制文件夹命令cp使用详解
指令名称:cp()
功能介绍:将一个文件复制至另一个文件,或将数个文件复制至另一目录。
语法格式:
cp [options] source dest
cp [options] source... directory
常用参数说明:
-a 尽可能将档案状态、权限等资料都照原状予以复制。
-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。
-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。
Linux复制文件夹命令cp使用实例
1.将文件aaa 复制(已存在),并命名为bbb:
cp aaa bbb
2.将所有的C语言程序拷贝至 Finished 子目录中 :
cp *.c Finished
3. 复制指定目录的文件到当前目录,并重命名
[root@rehat root]# cp ~/.bashrc bashrc_bak
4. 强制复制指定目录的文件到当前目录,而不管当前目录是否含有该文件
[root@rehat root]# cp -f ~/.bashrc bashrc
5. 复制指定目录到当前目录
[root@rehat root]# cp -r /root/test .
[root@rehat root]# cp -r /root/test/ .
两者效果一样,在复制目录时,会将源路径的最后一级目录全部复制过去,包括它本身。
6. 复制指定目录的文件到指定目录
[root@rehat root]# cp ~/.bashrc /bak/.bashrc
7. 在复制时将源文件的全部属性也复制过来。若不指定参数,则目标文件与源文件属性可能不一致。
[root@rehat root]# cp -a ~/.bashrc /bak/.bashrc
8. 若两个文件夹要保证同步,一个文件的改了,另一个文件也跟着改,但是要保证两个文件的文件都是最新的。
[root@rehat root]# cp -u /src/.bashrc /bak_src/bashrc
(10)linuxc语言文件复制扩展阅读:linux scp命令远程复制文件夹
1、拷贝本机/home/administrator/test整个目录至远程主机192.168.1.100的/root目录下
复制代码代码如下:
scp -r /home/administrator/test/ [email protected]:/root/
2、拷贝单个文件至远程主机
复制代码代码如下:
scp /home/administrator/Desktop/old/driver/test/test.txt [email protected]:/root/
其实上传文件和文件夹区别就在参数 -r, 跟cp, rm的参数使用差不多, 文加价多个 -r
3、远程文件/文件夹下载
举例,把192.168.62.10上面的/root/文件夹,下载到本地的/home/administrator/Desktop/new/下,使用远程端的root登陆
复制代码代码如下:
scp -r [email protected]:/root/ /home/administrator/Desktop/new/