【问题标题】:read function in C does not terminateC中的读取函数不会终止
【发布时间】:2014-12-25 14:32:19
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char buf[32];

int main(int argc, char* argv[], char* envp[]){
    if(argc<2){
            printf("pass argv[1] a number\n");
            return 0;
    }

    int fd = atoi(argv[1]) - 0x1234;
    printf("%d\n", fd);
    int len = 0;
    len = read(fd, buf, 32);
    printf("%s", buf);
    return 0;
}

这是我的代码,但我无法打印 buff。因为 read 函数不会终止。请帮忙看看有什么问题?我从这样的终端运行程序:
./fd 4660

【问题讨论】:

  • 我看不到您在哪里打开文件描述符?
  • 我会先打开一个文件。文件描述符是一个整数,是的。但是你不能只传递任何整数来读取,它必须是一个打开的文件,并且atoi 不会打开文件。
  • ./fd 4660 也许你正在阅读标准输入(和阻塞)?
  • 您正在从标准输入的 fd 0 读取。您需要通过换行符终止您的输入。你打了一行字吗?
  • @Maksim - 您也忽略了来自read 的返回值。这就是函数告诉你它是成功还是失败的方式。这通常对 I/O 功能很重要。

标签: c file-descriptor


【解决方案1】:

您的文件在哪里打开?在读取或写入文件之前,请确保以适当的权限打开文件

请检查 read 的返回值。

查看以下链接: http://gd.tuwien.ac.at/languages/c/programming-bbrown/c_075.htm

国际海事组织有

printf("%s\n", buf);

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 2023-03-21
    • 2014-03-16
    • 2020-01-07
    • 2020-03-08
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多