Linux下用C语言写一个FTP系统程序,包含server和client两部分

Python014

Linux下用C语言写一个FTP系统程序,包含server和client两部分,第1张

我觉得你可能没讲清楚吧,是写一个类似FTP功能的程序(包括server和client)?还是要实现一个FTP的server和client?前者很简单,先百度linux socket编程,再百度linux下文件读写,之后无非就是调通server和client的tcp连接之后,把读出来的东西发过去就是了。后者要实现完整的ftp协议,如果你只是本科的话,我觉得这个确实够难的,但这也是有开源代码的,http://sourceforge.net/projects/libftp/,反正是大作业,慢慢看吧。不过我感觉你的需求多半是前者,否则你们老师也太BT了,这年头谁还会自己开发ftp协议啊。。。

正确的格式是这样的:

USER 用户名

PASS 密码

如果匿名登录,那么就应该是

USER Anonymous

PASS

如果不行,应该是FTP服务器不支持匿名登录。

下面的程序,编译之后,你可以运行很多个实例,目前我将文件写在了D:\1.txt,每个程序写1000行数据,这些值你可以自己更改(比如 写在C:,每个程序写10000行等),等程序都写完后,你可以去文件中查看写文件的结果。补充一下,我是在VC6.0环境中写的,所以windows.h,如果你不是在这个环境中的话,可能需要修改一些定义,比如DWORD等。其他的API都是windows平台提供的API;

#include <stdio.h>

#include "windows.h"

int main()

{

//获取进程ID,因为你希望是多个进程运行同时写一个文件,所以,我们打印出进程ID

DWORD dwProcessID = GetCurrentProcessId()

//初始化我们要写入文件中的内容,及该内容长度;

char szContent[100] =

sprintf(szContent,"process[%u] write file\r\n",dwProcessID)

DWORD dwContentLen = strlen(szContent)

//创建互斥量,这样可以进行进程间的互斥,当然用这个也可以做线程间的互斥

HANDLE hMutex = CreateMutex(NULL,FALSE,"MyFileMutex")

if (NULL == hMutex)

{

printf("[%u]Create/Open Mutex error!\r\n",dwProcessID)

return 1

}

//创建或打开文件

HANDLE hFile = CreateFile("D:\\1.txt",

GENERIC_READ | GENERIC_WRITE,

FILE_SHARE_WRITE | FILE_SHARE_READ,NULL,

OPEN_ALWAYS,

FILE_ATTRIBUTE_ARCHIVE,

NULL)

if (INVALID_HANDLE_VALUE == hFile)

{

printf("[%u]Creat/Open file error!\r\n",dwProcessID)

return 1

}

//循环写入文件

for(int i = 0i <1000 i++)

{

//等待临界资源,即锁定文件

WaitForSingleObject(hMutex,INFINITE)

printf("Process[%u] Get the signal\r\n",dwProcessID)

DWORD len = 0

//因为是共享写文件,即多个程序写一个文件,所以一定要将文件指针偏移到尾部

SetFilePointer(hFile,0,NULL,FILE_END)

//写入文件

BOOL rnt = WriteFile(hFile,szContent,dwContentLen,&len,NULL)

if (rnt == FALSE)

{

printf("Process[%u] Fail to write file\r\n",dwProcessID)

}

//释放互斥量,解除锁定

ReleaseMutex(hMutex)

//加个Sleep便于我们中间观察结果

Sleep(30)

}

CloseHandle(hMutex)

CloseHandle(hFile)

return 0

}

应你要求,我把AIP中的宏定义解释如下:

HANDLE hFile = CreateFile("D:\\1.txt",

GENERIC_READ | GENERIC_WRITE,//表示程序对该文件有读和写的权限

FILE_SHARE_WRITE | FILE_SHARE_READ,//表示可以多个程序共享读和写的权限

NULL,

OPEN_ALWAYS,//表示打开该文件,如果该文件不存在,则创建该文件

FILE_ATTRIBUTE_ARCHIVE,//文件的属性为存档

NULL)

WaitForSingleObject(hMutex,INFINITE)

//INFINITE表示永远等待,直到hMutex有信号为止

SetFilePointer(hFile,0,NULL,FILE_END)

//FILE_END表示从文件尾部开始偏移;实际此举就是将文件指针偏移到文件尾部;

另外,虚机团上产品团购,超级便宜