【发布时间】: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