我正在编写一个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')
我不知道如何比较缓冲区中的数据。我试图使用缓冲区,但没有成功。请帮助!
答案 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;
}
}