出於好奇,是否可以暫時添加應該被解釋爲EOF的字符?例如,在循環中使用read()系統調用,並通過暫時將新行字符註冊爲EOF來使其在'\n'
上中止。定義EOF字符
定義EOF字符
回答
不,不可能。如果你想從一個文件描述符中讀取,直到你遇到一個特定的字符,並避免讀取任何東西(例如,爲了不消耗其他進程需要的輸入,例如),唯一的解決方案是執行1個字節的讀取。這很慢,但事實就是這樣。
使用stdio(或C++等價物)緩衝代替 - 保存在系統調用中,您可以檢查下一個字符是您正在尋找的那個字符。您可以將其配置爲從磁盤讀取大量數據。 – 2012-03-22 17:36:07
謝謝,這基本上是我懷疑的。我有這個想法,「我想知道如果..」,並想檢查堆棧溢出社區。 – foo 2012-03-22 17:53:15
@EdHeal:的確,如果你是唯一一個從文件描述符中讀取數據的人,這就是你應該做的事情,但是如果你想與其他進程共享fd,這將無濟於事。例如,如果你想實現類似shell的'read'命令(其中後續輸入保留在fd上以供下一個讀取命令),或者如果你正在實現一個web服務器並且希望它通過在處理標題後請求(例如,POST)到子進程。 – 2012-03-22 18:31:07
不容易,但它可能是你可以做一些與fdopen()
和一個自定義功能:
int freadtochar(char *buffer, int size, char character, FILE *filePtr)
{
int index = 0;
char c;
while (index < size && (c = fgetc(filePtr)) != EOF && c != character)
{
buffer[index++] = c;
}
return index;
}
int main()
{
int fd = STDIN_FILENO;
FILE *filePtr = fdopen(dup(fd), "r");
char buffer[1024];
int bytesRead = freadtochar(buffer, 1024, '\n', filePtr);
// buffer should now contain all characters up to '\n', but note no trailing '\0' is added
fclose(filePtr);
}
注意,這還是從原來的文件描述符讀取,它只是緩存中的數據爲您服務。
謝謝,我會訴諸這樣的事情。 – foo 2012-03-22 17:55:03
請注意,這仍然將數據從fd中提取出來;它只是爲你緩衝。還要注意''fclose'關閉了原來的fd,所以如果你不想這樣做,你應該'fdopen(dup(fd),「r」);'而不是。 – 2012-03-22 18:32:17
@R ..非常好的一點,我更新了答案。 – 2012-03-22 18:35:51
- 1. EOF字符(Ctrl + d)
- 2. cin忽略eof字符? !返回-0忽略EOF字符
- 3. Strtok問題C(EOF字符?)
- 4. fseek在EOF上的字符
- 5. 用新行字符Implode EOF
- 6. Lex/Flex - 掃描EOF字符
- 7. getc()在返回EOF後定義了嗎?
- 8. 定義字符串文字?
- 9. 指針和字符串,沒有對EOF
- 10. 檢查字符串中的eof :: getline
- 11. 如何比較字符串與EOF?
- 12. Burrows-Wheeler變換無EOF字符
- 13. '早熟EOF'和'壞字符'錯誤
- 14. 輸入字符串錯誤EOF
- 15. eof字符串,而不是流
- 16. EOF警告:多字符常量[-Wmultichar]
- 17. 定義自定義字符串方法
- 18. 確定文件是否以EOF字符正確結束
- 19. 固定字符串與spacebars和EOF檢查
- 20. EOF符號常量
- 21. 如何有NULL字符的字符串時,處理EOF
- 22. 綁定WPF - 轉義字符「@」
- 23. 字符串定義問題
- 24. 定義一個字符串
- 25. Javascript - 轉義特定字符
- 26. 用戶定義的字符
- 27. 定義字符串,多行
- 28. 訂單定義字符串
- 29. 自定義字符串類
- 30. 字符串是未定義
另請參閱:http://www.glue.umd.edu/afs/glue.umd.edu/system/info/olh/Programming/C_Programming_on_Glue/The_Third_C_Program_Character_Data/eof_stdio – 2012-03-22 17:27:19
任何字符,或只是換行符? – 2012-03-22 17:28:37
@CarlNorum在這種情況下換行符,但出於好奇任何任意字符。如果你碰巧知道'\ n'的特殊情況,請告訴。 – foo 2012-03-22 17:31:51