簡體   English   中英

C編程:如何創建父目錄並手動插入文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM