MST

星途 面试题库

面试题:C语言中Linux文件描述符的基础操作

在Linux环境下使用C语言,假设已有一个文件描述符fd,编写一段代码实现从该文件描述符对应的文件中读取100字节的数据并存储到缓冲区buf中,同时检查读取操作是否成功。请写出关键代码片段并解释每个步骤。
22.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>

int main() {
    // 假设fd已经被正确初始化
    int fd; 
    char buf[100];

    // 从文件描述符fd对应的文件中读取100字节的数据
    ssize_t bytes_read = read(fd, buf, 100); 

    // 检查读取操作是否成功
    if (bytes_read == -1) {
        perror("read error");
        exit(EXIT_FAILURE);
    } else if (bytes_read < 100) {
        printf("Read fewer bytes than expected. Read %zd bytes.\n", bytes_read);
    } else {
        printf("Successfully read 100 bytes.\n");
    }

    return 0;
}

步骤解释

  1. 定义变量
    • fd:假设已经被正确初始化的文件描述符。
    • buf[100]:定义一个字符数组buf,用于存储从文件中读取的100字节数据。
  2. 读取数据
    • ssize_t bytes_read = read(fd, buf, 100);:调用read函数从文件描述符fd对应的文件中读取100字节的数据到buf缓冲区中。read函数返回实际读取的字节数,如果读取失败返回 -1。
  3. 检查读取结果
    • if (bytes_read == -1):如果read函数返回 -1,表示读取操作失败,使用perror函数打印错误信息,并调用exit函数以失败状态退出程序。
    • else if (bytes_read < 100):如果实际读取的字节数小于100,表示没有读取到预期的100字节,打印提示信息说明实际读取的字节数。
    • else:如果实际读取的字节数等于100,表示成功读取100字节,打印成功信息。