我想同時處理不同的文件。我的程序將得到第一個參數,它是一個文件,其中包含我的電腦上不同文件的名稱(absolute paths
),第二個參數是要運行的程序的名稱(現在稱爲anotherProgram
)。所以,一個這樣的文件可能是這樣的這是一種在linux編程中同時處理文件的有效方法嗎?
/usr/home/username/Desktop/folder/file.txt
/usr/home/username/Desktop/file2.txt
/usr/home/username/Desktop/folder/directory/anotherfile.txt
/usr/home/username/Desktop/folder/file3.txt
/usr/home/username/Documents/folder/file5.txt
/usr/home/username/Desktop/file10.txt
/usr/home/username/Desktop/folder/file9.txt
現在我的C程序將讀取每一行,然後使用低空開放系統調用打開該文件。現在我將分叉一個進程,在子進程中,我將執行該特定文件描述符中的任務(在我們的示例中爲anotherProgram
),而父進程返回並打開第二個文件(在第二行)並再次分叉,等等向前。 (請參閱問題2)
這個anotherProgram將以文件描述符作爲參數執行。通過這種方式,在我的可執行子中,即使在分叉之後,我仍然可以使用相同的文件描述符來引用同一個文件?並因此同時處理?這anotherProgram
可能是剛剛從文件描述符中讀取的東西等。
所以現在我已經說了這一切,我有幾個問題。
這是一種同時處理文件的有效方法嗎?我不想要線程,但我想用fork來做到這一點。另外,因爲我在父項循環中運行fork,所以每個新的子項都會繼承先前的文件描述符,例如,第一個子項將繼承「3」,第二個子項將繼承「3」和「4」,然後第三個孩子會繼承'3','4'和'5'文件描述符。那麼有沒有辦法避免這種情況,以便孩子'我'只繼承'ith'文件描述符?
TLDR;我有一份文件和一個程序的列表,我想同時使用fork,dup,exec或piping來同時應用它們,而沒有任何線程。我該怎麼做呢?
我也是那個「我們」的一部分。除此之外,你是否曾經想過我正在做這個分析和基準測試?我只想了解系統調用的用法。 – posixKing
當你簡單地使用'xargs'(或GNU'parallel')時,看起來你會寫一個'xargs'(或GNU'parallel')的簡單版本。 –