c程序使用系统调用计算文件中的行数

时间:2012-04-01 05:13:25

标签: c

我正在编写一个C程序,使用open(),read(),write()close()等系统调用来计算文件中的行数。我用库做的同一个程序调用了fopen(),fread(),fwrite()并且工作得很好,但只是系统调用,我被卡住了。

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++;

我的问题在这里:

  

if(myb =='\ n')

我不知道如何比较缓冲区中的数据。我试图使用缓冲区,但没有成功。请帮助!

3 个答案:

答案 0 :(得分:4)

您将指针(buffer)与char('\n'

进行了比较

您应该取消引用指针,例如:

if (*buffer == '\n')

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

在这里,我解决了如何计算文件中的单词

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

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