記錄:fprintf無法寫入檔案(gcc下沒有fflush)
阿新 • • 發佈:2018-12-21
下面程式是沒有問題的。
#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