1. 程式人生 > >記錄:fprintf無法寫入檔案(gcc下沒有fflush)

記錄: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;
}


執行結果:

[email protected]:/home/test# ./test
Interactive mode off.
[email protected]:/home/terst# 
[email protected]:/home/neo/ftp/test# ls
acc
[email protected]:/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