2012-04-01 19 views
0

我正在編寫一個C程序來使用諸如open(),read(),write()close()之類的系統調用來計算文件中的行。我用庫函數調用fopen(),fread(),fwrite()的同一個程序並且工作得很好,但是隻用系統調用,我就卡住了。c程序使用系統調用來計算文件中的行

int fd1; // file descriptor 
fd1=open("f1.txt",O_RDONLY); // opening file 
read(fd1, buffer , 1); // reading 1 byte from file 
// now comparing 
if (buffer == '\n') 
line++; 

我的問題是在這裏:

如果(MYB == '\ n')

我不知道如何將數據從緩衝區進行比較。我試圖使用緩衝區,但沒有成功。請幫助!

+0

如何'buffer'聲明? – icktoofay 2012-04-01 05:15:35

+0

什麼是myb?它沒有出現在您發佈的代碼中的任何地方。 – talonmies 2012-04-01 06:37:40

+0

myb是緩衝區(mybuffer ... myb) – user114500 2012-04-01 09:10:03

回答

4

你相比指針(buffer)爲char('\n'

您應該取消引用指針,例如:

if (*buffer == '\n') 

if (buffer[0] == '\n') 
+0

他只使用1個字符的緩衝區,所以緩衝區可能是一個簡單的'char'(並且名稱仍然適用),在這種情況下,解決方案將被讀取fd1,&buffer,1);'。 – Potatoswatter 2012-04-01 07:13:55

+0

在這種情況下,調用'read(fd1,buffer,1);'可能會下降,因爲緩衝區不是有效的指針。 – MByD 2012-04-01 07:48:14

0

系統調用不除了你提供的東西外,請做任何緩衝,所以你確實不希望一次只讀取一個字節。到了一定程度,更大的緩衝區會更好,但是過去幾千字節(或者更多)增加緩衝區大小隻會獲得更多的性能,以換取更多的內存。

char buffer[16384]; 
int bytes_read; 
unsigned lines = 0; 

int fd1 = open("name.txt", O_RDONLY); 

while (bytes_read = read(fd1, buffer, sizeof(buffer)) { 
    int i; 
    for (i=0; i<bytes_read; i++) 
     if (buffer[i] == '\n') 
      ++lines; 
} 
+0

@ user114500:我正在尋找我的代碼部分中的拼寫錯誤,或者我發佈的內容與您的評論之間的任何差異。如果存在差異,我似乎錯過了它。 – 2012-04-01 09:11:24

+0

感謝您的幫助現在問題已解決 – user114500 2012-04-01 12:19:17

+0

我想添加一個功能到我的程序。統計單詞可以有人告訴我如何統計文件中的單詞 – user114500 2012-04-05 03:00:40

0

那麼我在這裏解決如何計算文件的話

while(sc !=EOF) 
{ 
sc=fgetc(at); // at is file stream 

     if(isspace(sc)) sp=1; 
     else if(sp) { 
      ++words; 
     sp=0; 
     } 
}