如何在C中读取带有read()函数的整数和char?

时间:2015-09-22 12:45:49

标签: c io

我正在使用linux,我有一个包含这样一行的文件:

328abc

我想在C中读取整数部分(328)和字符' a'' b'' c',仅使用功能:

ssize_t read (int filedes, void *buffer, size_t size))

这是文件中唯一包含的内容。 我知道有更好的方法可以用其他功能来做到这一点,但是我已经很长时间没有在C中编码了,并且试图帮助一个朋友,只有这个功能被赋予了。 我如何使用缓冲区来做到这一点? 感谢

编辑: 我知道我需要手动解析缓冲区。我的问题是怎么做的?

2 个答案:

答案 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次呼叫之间分配一条线路,因此您需要谨慎处理该情况。