我正在使用linux,我有一个包含这样一行的文件:
328abc
我想在C中读取整数部分(328)和字符' a'' b'' c',仅使用功能:
ssize_t read (int filedes, void *buffer, size_t size))
这是文件中唯一包含的内容。 我知道有更好的方法可以用其他功能来做到这一点,但是我已经很长时间没有在C中编码了,并且试图帮助一个朋友,只有这个功能被赋予了。 我如何使用缓冲区来做到这一点? 感谢
编辑: 我知道我需要手动解析缓冲区。我的问题是怎么做的?
答案 0 :(得分:3)
如果这是文件中的唯一内容。这样做:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main() {
char buffer[6];
char intBuffer[4];
ssize_t bytesRead;
int number;
int fd;
if ((fd = open("file.txt", O_RDONLY)) == -1) {
perror("Error opening file");
exit(EXIT_FAILURE);
}
if ((bytesRead = read(fd, buffer, 6)) == -1) {
perror("Error reading file");
exit(EXIT_FAILURE);
}
memcpy(intBuffer, buffer, 3);
intBuffer[3] = '\0';
number = atoi(intBuffer);
printf("The number is %d\n", number);
exit(EXIT_SUCCESS);
}
以下代码将打印&#34;数字为328&#34;。
答案 1 :(得分:0)
这是某种功课吗?
我在问,因为有比使用read
函数更好的方法。
无论如何要回答你的问题,read
从文件描述符为size
的文件中读取filedes
个字节,并将它们放到buffer
。
它对换行等没有任何了解所以你需要手动查找一行结束的位置等。如果你只想使用read,那么你需要在每次调用{{1}后手动解析缓冲区(假设您的文件包含许多行,您要解析)。
请注意,可能会在两次read
次呼叫之间分配一条线路,因此您需要谨慎处理该情况。