下面程序是没有问题的。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fp;
char *ip = "192.168.0.71";
char *user = "neo";
char *pass = "neo";
//ftp服务器内的路径
char *dpath = "/test";
//多媒体文件所在的路径
char *spath = "/home/JT808/client/find_test/mv_test";
//需要上传的多媒体文件
char file[8] = "acc";
//切换当前目录到spath--多媒体所在的目录
chdir(spath);
if((fp = popen("ftp -n","w")) == NULL)
return 1;
//连接ftp服务器地址
fprintf(fp,"open %s \n",ip);
//登录,输入用户名和密码
fprintf(fp,"user %s %s \n",user , pass);
//自动长传,不用每个文件都询问是否上传
fprintf(fp,"prompt\n");
//切换到指定上传的ftp的目录
fprintf(fp,"cd %s\n", dpath);
//上传文件
fprintf(fp," mput %s \n", file);
//断开连接
fprintf(fp,"bye \n");
pclose(fp);
return 0;
}
运行结果:
root@ubuntu:/home/test# ./test
Interactive mode off.
root@ubuntu:/home/terst#
root@ubuntu:/home/neo/ftp/test# ls
acc
root@ubuntu:/home/neo/ftp/test#
自己写的上述程序,怎么测试怎么没问题。
然后把上述程序加到我socket控制的ftp上传文件中时,怎么都不能上传,检查半天发现忘记pclose了,很尴尬。
结论:
使用fprintf无法向文件写入时,检查一下是否忘记close了(pclose、fclose)
(具体为什么不close就无法写入,本人也不是很清楚,还需要再研究)
20181218更新:
不close就无法写入的原因是,没有fflush。
但是在gcc下是没有fflush的。可以参考一下下面的链接(没有测试过,不清楚是不是可以解决)
https://blog.csdn.net/wdjhzw/article/details/39807609?tdsourcetag=s_pctim_aiomsg