[英]C Programming: How to create a parent directory and insert files manually?
我的目標是在我的C程序中創建一個新目錄。 在此目錄中,我想創建15個簡單的文本文件。 我停留的部分是如何在新創建的目錄中生成15個文本文件。 我創建了這樣的新目錄:
mkdir("new_dir", 0755);
但是我不確定如何在其中創建一個文本文件(在同一程序中)。 有什么提示嗎?
我猜您在某些POSIX系統上。 C11標准(讀取n1570 )不了解目錄 ( 操作系統提供的抽象 )。 如果您使用的是Windows,則它具有不同的WinAPI (然后應使用CreateDirectory )
首先,對mkdir(2)的調用可能會失敗(由於多種原因,包括目錄已經存在的事實)。 很可能您實際上是想在主目錄中創建目錄,或在當前工作目錄中創建要創建的文檔(例如,將一些適當的和先前的cd
shell的負擔留給用戶)。 實際上,目錄路徑應在運行時作為字符串計算(也許使用snprintf(3)或asprintf(3) )。
因此,如果您想在用戶的主目錄中創建目錄(請記住, ~/foo/
在globing期間被外殼程序擴展了,請參見glob(7) ...;您需要從environ(7)獲取主目錄。 ) ),您將編寫類似以下內容的代碼:
char pathbuf[256];
snprintf(pathbuf, sizeof(pathbuf), "%s/new_dir", getenv("HOME"));
計算該字符串。 當然,您需要處理失敗( getenv(3)或snprintf
)。 我把這些支票留作練習。 您可能需要將getenv("HOME")
的結果保留在一些自動變量中 。
然后,您需要創建目錄,並檢查是否失敗。 至少(使用perror(3)並查看errno(3) ):
if (mkdir (pathbuf, 0750)) { perror(pathbuf); exit(EXIT_FAILURE); }
順便說一句,傳遞給mkdir
的模式可能不允許所有其他用戶寫入或訪問它(如果這樣做,則可能會有一些安全漏洞 )。 所以我更喜歡0750
而不是您的0755
。
最后,您需要在其中創建文件,也許在寫入文件之前使用fopen(3) 。 所以一些代碼像
int i = somenumber();
snprintf(pathbuf, sizeof(pathbuf),
"%s/new_dir/file%d.txt", getenv("HOME"), i);
FILE* f = fopen(pathbuf, "w");
if (!f) { perror(pathbuf); exit(EXIT_FAILURE); };
正如喬納森·萊夫勒(Jonathan Leffler)明智地指出的那樣,還有其他方法。
我的建議是記錄一些約定。 您是要程序在當前工作目錄中創建目錄還是在某個“絕對”路徑中創建目錄,也許與用戶的主目錄有關? 如果您的程序是由某些用戶啟動的(不是setuid或沒有root權限,請參見憑據(7) ),則不允許在任意位置創建目錄或文件(請參見hier(7) )。
如果在Linux上,則最好閱讀一些系統編程書籍,例如ALP或更高版本。 如果使用其他操作系統,則應閱讀其系統API的文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.