Linux嵌入式之IO编程总结篇

*单机模式模式下的文件上传下载的服务器的实现*

步骤如下:

步骤1)输入服务器的地址:路径和目录名

步骤2)列出服务器中的所有文件:opendir ,readdir

步骤3)输入要从文件服务器下载的文件名   或   上传文件到服务器的文件名

步骤4) 下载文件                                         或    上传文件

涉及的(文件IO)系统调用函数有:open(), read(), write(), close()

涉及的(标准IO)c库函数有:fopen(),fputs(),fgets(),  fputc(),fgetc(),fread(),fwrite(),fclose()

客户端client实现代码C语言:

#include"stdio.h"
#include"dirent.h"
#include"sys/types.h"
#include"string.h"
#include"unistd.h"
#include"fcntl.h"

int main()
{
        int src_fp,des_fp;
        DIR *dp;
        char server[128];
        struct dirent *dir;
        start:
        printf("please enter server Path and Directory name\n");
        scanf("%s",server);
        //open server all of files
        dp=opendir(server);
        if(dp==NULL)
        {
        printf("open server:%s failure\n",server);
        goto start;
        }
        printf("open server %s success\n",server);

        while(1)
        {
        dir=readdir(dp);//display all of files in server Directory
        if(dir==NULL)
        {
        break;
        }
        else
        {
        printf("dir_inode=%ld,    dir_name=%s\n",dir->d_ino,dir->d_name);
        }
        }

        char file[128]={0};
        //start to downloard file form Server Directory
        printf("please enter a downloard file name\n");
        scanf("%s",file);

        //open server Directory file
        src_fp=open(strcat(strcat(server,"/"),file),O_RDONLY);
        if(src_fp<0)
        {
        printf("open src_file %s failure\n",file);
        return -1;
        }
        printf("open src_file %s succes\n",file);

        //open des_file 
        des_fp=open(file,O_CREAT | O_WRONLY,0777);
        if(des_fp<0)
        {
        printf("open des_file %s failure\n",file);
        return -2;
        }
        printf("open des_file %s success\n",file);

        int read_ret;
        char read_buf[128]={0};
        while(1)
        {
        read_ret=read(src_fp,read_buf,128);
        write(des_fp,read_buf,read_ret);
        if(read_ret<128)
        {
        printf("downloard over!");
        break;
        }
        }
        close(src_fp);
        close(des_fp);
        closedir(dp);
        return 0;
}

服务器端server的实现代码:

#include"stdio.h"
#include"dirent.h"
#include"sys/types.h"
#include"string.h"
#include"unistd.h"
#include"fcntl.h"

int main()
{
        int src_fp,des_fp;
        DIR *dp;
        char server[128];
        struct dirent *dir;
        start:
        printf("please enter server Path and Directory name\n");
        scanf("%s",server);
        //open server all of files
        dp=opendir(server);
        if(dp==NULL)
        {
        printf("open server:%s failure\n",server);
        goto start;
        }
        printf("open server %s success\n",server);

        while(1)
        {
        dir=readdir(dp);//display all of files in server Directory
        if(dir==NULL)
        {
        break;
        }
        else
        {
        printf("dir_inode=%ld,    dir_name=%s\n",dir->d_ino,dir->d_name);
        }
        }

        char file[128]={0};
        //start to uploard file to Server Directory
        printf("please enter a uploard file name\n");
        scanf("%s",file);

        //open and create upload file on server
        des_fp=open(strcat(strcat(server,"/"),file),O_CREAT | O_RDWR | O_TRUNC,0777);
        if(des_fp<0)
        {
        printf("open des_file %s failure\n",file);
        return -1;
        }
        printf("open des_file %s succes\n",file);

        //open src_file 
        src_fp=open(file,O_RDONLY);
        if(src_fp<0)
        {
        printf("open src_file %s failure\n",file);
        return -2;
        }
        printf("open src_file %s success\n",file);

        int read_ret;
        char read_buf[128]={0};
        while(1)
        {
        read_ret=read(src_fp,read_buf,128);
        write(des_fp,read_buf,read_ret);
        if(read_ret<128)
        {
        printf("uploard over!");
        break;
        }
        }

        close(src_fp);
        close(des_fp);
        closedir(dp);
        return 0;
}

仅供参考!

发布了26 篇原创文章 · 获赞 11 · 访问量 619

猜你喜欢

转载自blog.csdn.net/weixin_38251305/article/details/103820422