linux下C语言实现文件传输的简单实例(详解)
- 格式:doc
- 大小:36.00 KB
- 文档页数:9
Linux下C语⾔的⽂件操作代码:1 #include <stdio.h>2 #include <string.h>3 #include <fcntl.h>4/*************基本的函数API********************5int open(const char *pathname, int oflag, int perms)6oflag:7 O_RDONLY 只读8 O_WRONLY 只写9 O_RDWR 读写10 O_APPEND 追加11 O_CREAT 创建12 O_EXCL 测试13 O_TRUNC 删除14perms:15被打开的⽂件的存取权限,采⽤8进制16int close(int fd)17ssize_t read(int fd, void *buf, size_t count)18fd:19⽂件描述符20buf:21指定存储器读取数据的缓冲区22count:23指定读取数据的字节数24ssize_t write(int fd, void *buf, size_t count)25fd:26⽂件描述符27buf:28指定存储器读取数据的缓冲区29count:30指定读取数据的字节数31off_t lseek(int fd, off_t offset, int whence)32fd:33⽂件描述符34offset:35偏移量,每⼀读写操作需要移动的字节数,可向前、可向后36count:37当前位置的基点:38 SEEK_SET(当前位置是⽂件的开头)39 SEEK_CUR(当前位置为⽂件指针的位置,新位置为当前位置加上偏移量)40 SEEK_END(当前位置问⽂件的尾部,新位置为⽂件⼤⼩加上偏移量的⼤⼩)41**********************************************/42int main(void)43 {44int fd,len;45char *buf = "Hello World!\n",Out[30];46 fd = open("a.txt", O_CREAT | O_TRUNC | O_RDWR, 0600);47 printf("open file:a.txt fd = %d\n", fd);48 len = strlen(buf);49int size = write(fd, buf, len);50 close(fd);51//Begin to read the file52 fd = open("a.txt", O_RDWR, 0600);53 lseek(fd, 0, SEEK_SET); //Before to read the file,you should call the function to make the fd point to begin of files54 size = read(fd, Out, 12);55 printf("size = %d\nread from file:\n %s\n",size,Out);56 close(fd);57return0;58 }实例1 读取⼀张通过MATLAB读取JPG图⽚转换成TXT⽂本的⽂件内容:⾸先图像是这样的lena.jpg:通过MATALB读取进去之后,转换成灰度图像,如下所⽰处理结果如上图所⽰:I = imread('F:\Leanring\C\Learning\lena.jpg');Gray = rgb2gray(I);imshow(Gray)接下来我们在变量⼀栏中,复制粘贴所有的数据到TXT⽂本当中,如下所⽰:MATLAB数据⽂本数据这样,我们通过分析⽂本中的数据分布格式,⾸先,⽂本挡住的所有数据都是只包含了图像的数据的,不包括了JPG图⽚格式相关的数据内容,其次,在我们复制粘贴的过程中的每两个数据之间的分隔⽅式都是通过TAB键来分隔的,同样的在每⼀⾏数据的结尾部分,都是通过回车键\t或者换⾏符\n来结尾的,所以根据这样的数据格式,我们设计如下的读取对应⽂本内容的C语⾔函数API,这⾥的TAB在ASCII的编码数据是:9 同样的,\t和\n的ASCII的编码是10和13,这样的话,通过if就能隔离开数据。
linux c语言开发实例Linux C语言开发实例Linux C语言开发是一种常见的开发方式,它能够为Linux操作系统编写高效的、可靠的和安全的应用程序。
通过使用C语言进行Linux开发,我们可以充分利用Linux操作系统的优势,从而创建出功能丰富且高性能的软件。
本文将以Linux C语言开发实例为主题,介绍一些常见的Linux C语言开发实例,帮助读者了解并掌握如何使用C语言进行Linux开发。
一、Linux C语言开发环境搭建首先,我们需要搭建Linux C语言开发环境。
在大多数Linux发行版中,C语言编译器已经预装在系统中,因此我们只需要使用以下命令安装所需的开发工具:sudo apt-get install build-essential这个命令会自动安装GCC编译器和其他必要的开发工具,如make和g++。
安装完成后,我们就可以开始编写C语言代码并进行Linux开发了。
二、Linux C语言开发示例1. 创建一个Hello World程序我们可以从创建一个简单的Hello World程序开始,这是每个新手学习C 语言的第一个例子。
打开一个文本编辑器,输入以下代码:c#include <stdio.h>int main(){printf("Hello World\n");return 0;}保存文件为hello.c。
接下来,我们需要通过命令行编译这个程序。
打开终端,输入以下命令:gcc -o hello hello.c这个命令将会使用GCC编译器将代码编译成可执行文件。
编译成功后,我们可以使用以下命令运行程序:./hello如果一切顺利,你将在终端中看到输出的"Hello World"。
2. 读写文件Linux C语言开发的另一个常见需求是文件操作。
我们可以使用C语言的标准文件操作函数来读取和写入文件。
c#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 1000int main(){FILE *fp;char str[MAX_SIZE];打开文件fp = fopen("example.txt", "r");if (fp == NULL){printf("无法打开文件!\n");exit(1);}从文件中读取内容fgets(str, MAX_SIZE, fp);printf("文件内容:s", str);关闭文件fclose(fp);return 0;}上述代码将打开名为example.txt的文件,并从文件中读取内容。
C语⾔基于socket的⽂件传输(可循环发送多个⽂件)基本简介:本次⽂件传输的实现主要是通过客户端向服务器发送下载请求,然后在服务器中找到对应的⽂件并打开⽂件,再继续向客户端传送⽂件,⽽客户端就在不停的接收。
这是因为⽂件可能⽐较⼤,⼀个缓冲数组只能保存⼀部分⽂件内容,因此服务器得不断从⽂件中读取内容并发给客户端,⽽客户端得不停的循环接收。
但是在事先,得将相应要发送的⽂件(照⽚,⾳频,视频等)保存在服务器相应的⽬录下。
⽽这个是不符合实际要求的,通常来讲,是应该将客户端1的⽂件发送给客户端2,⽽服务器仅仅只是起到⼀个中转站的作⽤,即⽂件应该事先保存在客户端1下。
这⾥我们只是完成⽂件传输的相应功能就⾏了,就不在计较这些啦。
因为只要你理解了这⼀块,可以根据⾃⼰的实际需要,在进⾏修改。
具体编译:gcc server.c -o server -lpthread //这是因为在服务器中加⼊了线程函数,所以编译的时候需要加上 -lpthread 。
gcc client.c -o client记住⼀定要先运⾏服务器,在运⾏客户端。
在客户端运⾏的时候回提醒你输⼊服务器对应的pc ip,如实输⼊就⾏啦。
如果是在本机pc上进⾏测试的话,也可以输⼊0.0.0.0 。
server.c:#include <stdio.h>#include <netdb.h>#include <sys/socket.h>#include <arpa/inet.h>#include <sys/types.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <netinet/in.h>#include <pthread.h>#define portnum 12345#define FILE_SIZE 500#define BUFFER_SIZE 1024void *net_thread(void * fd);int main(){//初始化套接字int server_fd=socket(AF_INET,SOCK_STREAM,0);if(-1==server_fd){perror("socket");exit(1);}//绑定端⼝和ip;struct sockaddr_in server_addr; //struct sockaddr_in为结构体类型,server_addr为定义的结构体server_addr.sin_family=AF_INET; //Internet地址族=AF_INET(IPv4协议)server_addr.sin_port=htons(portnum); //将主机字节序转化为⽹络字节序 ,portnum是端⼝号(server_addr.sin_addr).s_addr=htonl(INADDR_ANY);//IP地址if(-1==bind(server_fd,(struct sockaddr *)&server_addr,sizeof(server_addr))) //套接字与端⼝绑定{perror("bind");exit(6);}//开启监听if(-1==listen(server_fd,5)) //5是最⼤连接数,指服务器最多连接5个⽤户if(-1==listen(server_fd,5)) //5是最⼤连接数,指服务器最多连接5个⽤户{perror("listen");exit(7);}while(1){struct sockaddr_in client_addr;int size=sizeof(client_addr);int new_fd=accept(server_fd,(struct sockaddr *)&client_addr,&size); //server_fd服务器的socket描述字,&client_addr指向struct sockaddr *的指针,&size指向协议地址if(-1==new_fd){perror("accept");continue; //进⾏下⼀次循环}printf("accept client ip:%s:%d\n",inet_ntoa(client_addr.sin_addr),client_addr.sin_port);//inet_ntoa将⼀个⼗进制⽹络字节序转换为点分⼗进制IP格式的字符串。
一、开发平台搭建1.引言Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性。
而近年来,Linux操作系统在嵌入式系统领域的延伸也可谓是如日中天,许多版本的嵌入式Linux系统被开发出来,如ucLinux、RTLinux、ARM-Linux等等。
在嵌入式操作系统方面,Linux的地位是不容怀疑的,它开源、它包含TCP/IP协议栈、它易集成GUI。
鉴于Linux操作系统在服务器和嵌入式系统领域愈来愈广泛的应用,社会上越来越需要基于Linux操作系统进行编程的开发人员。
浏览许多论坛,经常碰到这样的提问:“现在是不是很流行unix/linux下的c编程?所以想学习一下!但是不知道该从何学起,如何下手!有什么好的建议吗?各位高手!哪些书籍比较合适初学者?在深入浅出的过程中应该看哪些不同层次的书?比如好的网站、论坛请大家赐教!不慎感激!”鉴于读者的需求,在本文中,笔者将对Linux平台下C编程的几个方面进行实例讲解,并力求回答读者们关心的问题,以与读者朋友们进行交流,共同提高。
在本文的连载过程中,有任何问题或建议,您可以给笔者发送email:21cnbao@,您也可以进入笔者的博客参与讨论:/21cnbao。
笔者建议在PC内存足够大的情况下,不要直接安装Linux操作系统,最好把它安装在运行VMWare 虚拟机软件的Windows平台上,如下图:在Linux平台下,可用任意一个文本编辑工具编辑源代码,但笔者建议使用emacs软件,它具备语法高亮、版本控制等附带功能,如下图:2.GCC编译器GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]options为编译选项,GCC总共提供的编译选项超过100个,但只有少数几个会被频繁使用,我们仅对几个常用选项进行介绍。
局域网文件传输系统项目说明需求说明:1,开发平台1.1linux x86 641.2支持Debian Ubuntu1.3支持rhel,centos,Fedora2,功能说明1.1文件上传与下载,讲指定文件上传到服务器,抑从服务器下载文件到指定位置1.2文件浏览,浏览本地文件以及服务器端文件1.3概要功能说明1.3.1客户端主要任务:1)分析用户输入的命令2)根据命令向服务器端发出请求3)等待服务器返回的结果1.3.2 服务器端主要任务1) 分析请求代码2) 根据请求代码做相应的处理3) 等待返回结果或者应答信息通信协议与服务器模型:本项目通信协议分两种对于get 命令和!ls命令这些需要传输文件内容的命令(!ls 需要传输列出的目录文件列表),采用四次握手的通信协议如图1_1所示图1_1 四次握手通信协议以get 命令举例,get 命令首先发出get 请求,服务器程序接收到请求后,发送请求的文件长度或者错误应答码,接收到文件长度后客户端发送RDY 应答信息,服务器端开始传输文件内容对于!CD 命令这种不需要传输文件内容的命令采取两次握手通信协议,如图1_2所示客户端命令应答信息RDY 信息传输的文件内容图1_2 两次握手通信协议本项目服务器采用多线程并发服务器模型,提供和客户端的交互。
3,源代码目录结构Svr├───common.h 总领整个服务器程序的头文件├───command.h 定义命令处理函数和初始化函数头文件├───command.c 定义命令处理函数和初始化函数├───main.c 定义程序主干函数└───makefileCli├───common.h 总领整个服务器程序的头文件,常用通文件皆放与此├───command.h 定义命令处理函数和初始化函数头文件├───command.c 定义命令处理函数和初始化函数├───main.c 客户端主干函数.├───input.c 定义命令分解函数,用于处理用户输入的命令└───makefile4,核心函数及数据结构定义4.1 客户端int do_connect(char *ip, int *sock_fd); 与服务器端进行连接int do_get(const char *src, const char *dst, int sock_fd);从远端服务器下载文件int do_put(const char *src, const char *dst, int sock_fd);向远端服务器上传文件int do_cd(char *path);进入当前主机指定目录int do_ls(char *path); 列出当前主机指定目录下的内容int do_serv_cd(char *path, int sock_fd);进入远端服务器指定目录int do_serv_ls(char *path, int sock_fd);列出当前服务器目录信息int bye(int sock_fd);退出服务器,关闭连接int split(struct commamd_line, char line[]);拆分命令相关函数struct command_line{char *name; 命令的名称char *argv[MAX_ARG]; 命令携带的参数};MAX_LINE 1024 向服务器端发送命令的最大长度PORT 8000 端口号COMMAND_LINE 256 用户输入客户端命令的最大长度MAX_LENGTH 64 每个参数或命令的最大长度客户端命令4.2 服务器int do_get(const char *src, const char *dst, int sock_fd); 处理用户的put命令int do_put(const char *src, const char *dst, int sock_fd); 处理用户的get命令int do_cd(char *path); 处理用户的!cd请求int do_ls(char *path); 处理用户的!ls请求ADDR_LEN 17 点分十进制IP地址的长度,包括最后的结束符5,客户端执行流程5.1 输出提示信息5.2 接受用户输入的命令5.3 输入命令是否为空,为空则程序正常退出,非空则继续5.4 输入命令是否为bye,是则程序正常退出,否则继续5.5 处理用户输入的命令5.6 输出提示信息,继续循环执行5.1—5.5的过程6,服务器执行流程6.1 服务器启动6.2 是否接收到一个连接,是则继续,否则等待6.3 创建连接是否成功,是则继续,否则打印出错信息6.4 创建一个子线程,是则继续,否则打印出错信息6.5 接收客户端传输的命令6.6 解析命令6.7 重复6.2—6.6过程部分测试命令(取决于你放文件的位置,仅供参考):put /home/ubuntu/Linux_Ser_Cli/Client/text/a.txt /home/ubuntu/Linux_Ser_Cli/Server/text put /home/ubuntu/Linux_Ser_Cli/Client/text/user.txt /home/ubuntu/Linux_Ser_Cli/Server/text get /home/ubuntu/Linux_Ser_Cli/Server/text/b.txt /home/ubuntu/Linux_Ser_Cli/Client/text源文件:客户端://Client common.h#pragma once#include <stdio.h>#include <stdlib.h>#include "command.h"//Client command.h#pragma once#include "common.h"#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <dirent.h>#include <unistd.h>#include <errno.h>#include <limits.h>#define MAX_LINE 1024 //向服务器端发送命令的最大长度#define PORT 8000 //端口号#define COMMAND_LINE 256 //用户输入客户端命令的最大长度#define MAX_LENGTH 64 //每个参数或命令的最大长度#define MAX_ARG 4struct command_line{char *name; // 命令的名称char *argv[MAX_ARG]; //命令携带的参数};int do_connect(char *ip, int *sock_fd); //与服务器端进行连接int do_get(const char *src, const char *dst, int sock_fd);//从远端服务器下载文件int do_put(const char *src, const char *dst, int sock_fd);//向远端服务器上传文件int do_cd(char *path); //进入当前主机指定目录int do_ls(char *path); //列出当前主机指定目录下的内容int do_serv_cd(char *path, int sock_fd); //进入远端服务器指定目录int do_serv_ls(char *path, int sock_fd); //列出当前服务器目录信息int bye(int sock_fd); //退出服务器,关闭连接int split(struct command_line *com, char line[]); //拆分命令相关函数char * path_alloc(size_t *sizep); //获取存放完整路径的内存空间起始地址和大小int input();struct command_line comd;int sock_fd;int argv; //输入的参数个数//Client command.c#include "common.h"int do_connect(char *ip, int *sock_fd) //与服务器端进行连接{int res;socklen_t len;char buf[100] = "";struct sockaddr_in svraddr,cliaddr;bzero(&cliaddr,sizeof(cliaddr)); //把一段内存区的内容全部设置为0*sock_fd = socket(PF_INET,SOCK_STREAM,0);svraddr.sin_family = AF_INET;svraddr.sin_port = htons(1234);inet_pton(AF_INET,ip,&(svraddr.sin_addr));res = connect(*sock_fd,(structsockaddr*)(&svraddr),sizeof(svraddr));read(*sock_fd,buf,sizeof(buf));printf("%s\n",buf); //printf("Connet Server Scuess!\n")return res;}int do_cd(char *path) //进入当前主机指定目录{char *ptr; // 记录改变后的文件目录size_t size;if(chdir(path) < 0){perror("chdir failed!\n");}ptr = path_alloc(&size); //our own functionif(getcwd(ptr,size) == NULL){perror("getcwd failed!\n");}printf("cwd = %s\n",ptr);return 0;}int do_ls(char *path) //列出当前主机指定目录下的内容{DIR *dp;struct dirent *dirp;if((dp = opendir(path)) == NULL){printf("can`t open %s\n",path);}while((dirp = readdir(dp)) != NULL){printf("%s\n",dirp->d_name);}closedir(dp);return 0;}int do_put(const char *src, const char *dst, int sock_fd) //向远端服务器上传文件{FILE * fp;char b_t[MAX_LENGTH]; //记录argv[1]的临时变量char buffer[MAX_LINE];char file_name[MAX_LENGTH];int file_block_length = 0; //文件int i = 0.,j = 0,len = 0;int res = 0;if(sock_fd >= 0){printf("Create Socket Sucess!\n");}else{perror("Failed!\n");exit(1);}write(sock_fd,,sizeof()); //向服务器发送操作符printf(":%s\n",);bzero(buffer,sizeof(buffer));strcpy(buffer,src);send(sock_fd,buffer,sizeof(buffer),0);//send(sock_fd,src,sizeof(src),0);printf("src:%s\n",buffer);bzero(buffer,sizeof(buffer));strcpy(buffer,dst);send(sock_fd,buffer,sizeof(buffer),0);printf("dst:%s\n",buffer);recv(sock_fd,buffer,sizeof(buffer),0); //Readyprintf("buffer:%s\n",buffer);if(strcmp(buffer,"Ready") == 0){bzero(buffer,sizeof(buffer));strcpy(b_t,src);len = strlen(b_t);i = len - 1;while(b_t[i] != '/') /*提取文件名*/{i--;}i++;while(i < len){file_name[j++] = b_t[i];i++;}file_name[j] = '\0';send(sock_fd,file_name,sizeof(file_name),0);printf("Send Server File Name:%s\n",file_name);bzero(buffer,sizeof(buffer));recv(sock_fd,buffer,sizeof(buffer),0);printf("Recv From Server:%s\n",buffer); //OKbzero(buffer,sizeof(buffer));fp = fopen(src,"r");if(NULL == fp ){printf("File:\t%s Not Found\n", file_name);}else{bzero(buffer, sizeof(buffer));while( (file_block_length =fread(buffer,sizeof(char),MAX_LINE,fp))>0){printf("file_block_length= %d\n",file_block_length);res = send(sock_fd,buffer,file_block_length+1,0);if(res<0){printf("Send File:\t%s Failed\n",file_name);break;}bzero(buffer, sizeof(buffer));} /*这段代码是循环读取文件的一段数据,在循环调用send,发送到客户端,这里强调一点的TCP每次接受最多是1024字节多了就会分片,因此每次发送时尽量不要超过1024字节。
使用Linux终端命令c复制文件和目录使用Linux终端命令复制文件和目录Linux操作系统具有强大的终端命令功能,其中包括复制文件和目录的命令。
通过Linux终端命令,我们可以轻松地将文件和目录复制到其他位置。
下面将介绍常用的复制命令以及它们的使用方法。
1. 复制文件:在Linux终端中,使用cp命令可以复制文件。
其基本格式如下: cp [选项] 源文件目标文件例如,要将名为file1的文件复制到目标位置/home/user/下,可以使用以下命令:cp file1 /home/user/如果要重命名复制的文件,可以在目标文件名后面添加一个新名称,如下所示:cp file1 /home/user/file2这将在/home/user/目录下创建一个名为file2的副本。
2. 复制目录:如果要复制整个目录及其下的所有文件和子目录,可以使用cp命令的-r选项。
其格式如下:cp -r 源目录目标目录假设我们要将名为dir1的目录复制到目标位置/home/user/下,可以使用以下命令:cp -r dir1 /home/user/这将在目标位置创建一个名为dir1的副本,并将dir1目录下的所有文件和子目录复制到该副本中。
3. 覆盖文件:在复制文件或目录时,如果目标位置已经存在同名文件,系统会询问是否覆盖。
如果想要自动覆盖目标文件,可以使用cp命令的-f选项。
例如:cp -f file1 /home/user/这将强制复制文件file1到目标位置,如果目标位置已经存在名为file1的文件,则会被覆盖。
4. 复制多个文件:如果要复制多个文件到同一个目标位置,可以依次列出这些文件名称,然后指定目标位置。
例如:cp file1 file2 file3 /home/user/这将同时复制file1、file2和file3到目标位置。
5. 复制到当前目录:如果目标位置是当前终端的工作目录,可以使用点号(.)表示。
linux c语言好玩的代码Linux操作系统下的C语言编程提供了许多有趣的代码实现,让程序员们可以在编写代码的过程中获得乐趣与挑战。
本文将介绍一些有趣的Linux C语言代码示例,帮助读者更好地理解和掌握这些代码的实现原理。
一、彩色输出文本在Linux终端中,我们可以使用ANSI转义序列来实现彩色输出文本。
通过在输出文本前插入相应的转义序列,可以改变文本的颜色、背景色和样式。
下面是一个简单的示例代码,实现了在终端中输出彩色的 "Hello World!" 文本。
```c#include <stdio.h>#define COLOR_RED "\x1b[31m"#define COLOR_GREEN "\x1b[32m"#define COLOR_YELLOW "\x1b[33m"#define COLOR_BLUE "\x1b[34m"#define COLOR_MAGENTA "\x1b[35m"#define COLOR_CYAN "\x1b[36m"#define COLOR_RESET "\x1b[0m"int main() {printf(COLOR_RED "Hello " COLOR_GREEN "World!" COLOR_RESET "\n");return 0;}```在这段代码中,我们使用了一些预定义的ANSI转义序列来定义不同的颜色。
通过在输出文本前插入相应的转义序列,可以改变输出文本的颜色。
通过这种方式,我们可以在终端中实现彩色的输出效果。
二、生成随机数在C语言中,我们可以使用rand()函数生成一个伪随机数序列。
下面是一个简单的示例代码,实现了生成一个1到100之间的随机数。
Linux系统的⽂件传输⽅法1.⽂件在系统中的传输1.scpscp file user@ip:/dir #上传scp user@ip:/file dir #下载2.rsync远程同步,速度快,默认会忽略⽂件属性、链接⽂件、设备⽂件rsync -参数 file user@ip:/dir #上传rsync -参数user@ip:/file dir #下载-r #同步⽬录-p #同步权限-o #同步⽂件所有⼈-g #同步⽂件所有组-l #同步链接-D #同步设备⽂件-t #同步时间注:westos/ #传送⽬录中的内容westos #传输⽬录及其内容3.tar归档⽂件,把很多个⽂件变成⼀个⽂件tar -参数 xxxx.tar file|/dir-c #创建-v #显⽰过程-f #指定归档内容-t #显⽰-r #添加⽂件当归档中-x #解压⼀个归档⽂件--get #解档指定⽂件--delete #删除归档中的指定⽂件-C #指定解档⽬录4.压缩zipzip -r xxxx.tar.zip xxx.tarunzip xxx.tar.zipgzgzip xxx.targunzip xxx.tar.gz====tar zcf xxx.tar.gz /xxxtar zxf xxx.tar.gzbz2bzip2 xxx.tarbunzip2 xxx.tar.bz2====tar jcf xxx.tar.bz2 /xxxtar jxf xxx.tar.bz2xzxz xxx.tarunxz xxx.tar.xz====tar Jcf xxx.tar.xz /xxxtar Jxf xxx.tar.xz注:gzip,bz2,xz可以归档和压缩⼀起总结以上所述是⼩编给⼤家介绍的Linux系统的⽂件传输⽅法,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
在此也⾮常感谢⼤家对⽹站的⽀持!。
linux传输文件命令linux系统下我们经常要互相传送文件,以下几个命令就可以做到。
下面由店铺为大家整理了linux传输文件命令的相关知识,希望大家喜欢!linux传输文件命令详解linux传输文件命令1.sftpSecure Ftp 是一个基于SSH安全协议的文件传输管理工具。
由于它是基于SSH的,会在传输过程中对用户的密码、数据等敏感信息进行加密,因此可以有效的防止用户信息在传输的过程中被窃取,比FTP有更高的安全性。
在功能方面与FTP很类似,不仅可以传输文件数据,而且可以进行远程的文件管理(如建立,删除,查看文件列表等操作)。
Sftp与ftp虽然只有一字之差,但基于的传输协议却是不同的。
因此不能用sftp client去连接ftp server 也不能用 ftp client 去连接sftp server。
建立连接:sftp user@host从本地上传文件:put localpath下载文件:get remotepath与远程相对应的本地操作,只需要在命令前加上”l” 即可,方便好记。
例如:lcd lpwd lmkdirlinux传输文件命令2.scpSCP :secure copy (remote file copy program) 也是一个基于SSH安全协议的文件传输命令。
与sftp不同的是,它只提供主机间的文件传输功能,没有文件管理的功能。
复制local_file 到远程目录remote_folder下scp local_file remote_user@host:remote_folder复制local_folder 到远程remote_folder(需要加参数 -r 递归)scp –r local_folder remote_user@host:remote_folder以上命令反过来写就是远程复制到本地linux传输文件命令3.sz/rzsz/rz 是基于ZModem传输协议的命令。
linux下C语言实现文件传输的简单实例 实例来自互联网,这段测试代码实现了基本的文件传输原理,没有实现错误处理。
////////////////////////////////////////////////////////////////////////////////////// // file_server.c 文件传输顺序服务器示例 ////////////////////////////////////////////////////////////////////////////////////// //本文件是服务器的代码 #include // for sockaddr_in #include // for socket #include // for socket #include // for printf #include // for exit #include // for bzero /* #include #include #include #include */ #define HELLO_WORLD_SERVER_PORT 6666 #define LENGTH_OF_LISTEN_QUEUE 20 #define BUFFER_SIZE 1024 #define FILE_NAME_MAX_SIZE 512
int main(int argc, char **argv) { //设置一个socket地址结构server_addr,代表服务器internet地址, 端口 struct sockaddr_in server_addr; bzero(&server_addr,sizeof(server_addr)); //把一段内存区的内容全部设置为0 server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htons(INADDR_ANY); server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);
//创建用于internet的流协议(TCP)socket,用server_socket代表服务器socket int server_socket = socket(PF_INET,SOCK_STREAM,0); if( server_socket < 0) { printf("Create Socket Failed!"); exit(1); }
//把socket和socket地址结构联系起来 if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr))) { printf("Server Bind Port : %d Failed!", HELLO_WORLD_SERVER_PORT); exit(1); }
//server_socket用于监听 if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) ) { printf("Server Listen Failed!"); exit(1); } while (1) //服务器端要一直运行 { //定义客户端的socket地址结构client_addr struct sockaddr_in client_addr; socklen_t length = sizeof(client_addr); //接受一个到server_socket代表的socket的一个连接 //如果没有连接请求,就等待到有连接请求--这是accept函数的特性 //accept函数返回一个新的socket,这个socket(new_server_socket)用于同连接到的客户的通信 //new_server_socket代表了服务器和客户端之间的一个通信通道 //accept函数把连接到的客户端信息填写到客户端的socket地址结构client_addr中 int new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length); if ( new_server_socket < 0) { printf("Server Accept Failed!\n"); break; }
char buffer[BUFFER_SIZE]; bzero(buffer, BUFFER_SIZE); length = recv(new_server_socket,buffer,BUFFER_SIZE,0);//这里先接收客户端发来的要获取的文件名 if (length < 0) { printf("Server Recieve Data Failed!\n"); break; } char file_name[FILE_NAME_MAX_SIZE+1]; bzero(file_name, FILE_NAME_MAX_SIZE+1); strncpy(file_name, buffer, strlen(buffer)>FILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen(buffer)); // int fp = open(file_name, O_RDONLY); // if( fp < 0 ) FILE * fp = fopen(file_name,"r"); if(NULL == fp ) { printf("File:\t%s Not Found\n", file_name); } else { bzero(buffer, BUFFER_SIZE); int file_block_length = 0; // while( (file_block_length = read(fp,buffer,BUFFER_SIZE))>0) while( (file_block_length = fread(buffer,sizeof(char),BUFFER_SIZE,fp))>0) { printf("file_block_length = %d\n",file_block_length); //发送buffer中的字符串到new_server_socket,实际是给客户端 if(send(new_server_socket,buffer,file_block_length,0)<0) { printf("Send File:\t%s Failed\n", file_name); break; } bzero(buffer, BUFFER_SIZE); } //这段代码是循环读取文件的一段数据,在循环调用send,发送到客户端,这里强调一点的TCP每次接受最多是1024字节,多了就会分片,因此每次发送时尽量不要超过1024字节。 // close(fp); fclose(fp); printf("File:\t%s Transfer Finished\n",file_name); } //关闭与客户端的连接 close(new_server_socket); } //关闭监听用的socket close(server_socket); return 0; }
////////////////////////////////////////////////////////////////////////////////////// // file_client.c 文件传输客户端程序示例 ////////////////////////////////////////////////////////////////////////////////////// //本文件是客户机的代码 #include // for sockaddr_in #include // for socket #include // for socket #include // for printf #include // for exit #include // for bzero /* #include #include #include #include */
#define HELLO_WORLD_SERVER_PORT 6666 #define BUFFER_SIZE 1024 #define FILE_NAME_MAX_SIZE 512
int main(int argc, char **argv) {