记录:fprintf无法写入文件(gcc下没有fflush)

下面程序是没有问题的。

#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

猜你喜欢

转载自blog.csdn.net/weixin_38184741/article/details/84764309
今日推荐