使用C中的read()系统调用读取字符串

时间:2015-11-21 20:57:48

标签: c string system-calls file-descriptor low-level-io

我需要实现一个C函数

ssize_t readString(int filedes, char* buf, ssize_t max);

从文件描述符'filedes'关联的文件中读取字符串 ,进入缓冲区'buf'并返回读取的字节数。

换句话说我想用

readString(fileDescriptor, buf);

与我使用的方式相同

fscanf(inputFile, "%s", buf);

下面我将介绍我到目前为止所做的工作,但它始终无法正常工作。 你对我的代码有什么建议吗? 你能建议更好地实现这个功能吗?

由于

ssize_t readString(int filedes, char* buf){
    char *temp;
    int n = sizeof(buf)/sizeof(char); int i;
    ssize_t rbytes = 0; /* bytes read */
    size_t cbyte = sizeof(char);

    /* check if file is empty */
    if (read(filedes, temp, cbyte) < 1)
        return 0;

    /* eat spaces */
    while ( (*temp == ' ') || (*temp == '\n') || (*temp == '\t') )
        if (read(filedes, temp, cbyte) < 1)
            return 0;

    /* read string */
    for (i=0; i<n-1; i++){
        buf[i] = *temp;
        rbytes++;

        /* check if file is over */
        if (read(filedes, temp, cbyte) < 1)
            return rbytes;
        /* check if string is over */
        if ( (*temp == ' ') || (*temp == '\n') || (*temp == '\t') )
            break;
    }

    buf[++i] = '\0';
    return rbytes;
}

1 个答案:

答案 0 :(得分:1)

ssize_t readString(int filedes, char* buf){
    char *temp;
    int n = sizeof(buf)/sizeof(char); int i;

我认为你误解了sizeof的作用。它计算出你要求它计算尺寸的东西的大小。在这种情况下,该bufchar *。因此,您基本上要求它指向一个字符的指针占用多少字节。据推测,你想要缓冲区的大小。所以你的函数需要它作为一个额外的参数。