我想知道是否有人可以澄清一些关于Linux中read()
功能的问题?目前,我不知道如何查看从read()命令返回的缓冲区。截至目前,它正在返回一个seg错误,当我可以运行它时,返回的值是我试图读取的文件中不存在的值。文本文件:测试测试。
因此,我没有获得testin(长度为6),而是获得了testin {。如果问题令人困惑,我很抱歉,如果您愿意,我会澄清更多。感谢您的所有时间和帮助!
int main(int argc, char *argv[]){
int fd = open("output_test.txt", O_RDWR | O_CREAT, 0666);
char *buffer;
char *copy;
// printf("%lu\n", strlen(buffer));
// write(fd, "testing", 7); //this automatically writes to
printf("%zd\n", read(fd, &buffer, 6));
printf("%lu\n", sizeof(buffer));
copy = buffer;
// printf("%lu\n", strlen(buffer));
printf("%s\n", copy);
}
答案 0 :(得分:4)
您必须为缓冲区分配内存
char *buffer = malloc(10);
请检查open()
read()
接收void*
。将代码更改为
printf("%zd\n", read(fd, buffer, 6));
要获取字符串的长度,请使用strlen()
而非sizeof()
。
作为奖励点,您的main()
函数的类型为int
,但您最终没有返回任何内容。
答案 1 :(得分:1)
读取已知大小的缓冲区并将其终止的正确方法:
#define MYSIZE 6
char buffer[MYSIZE+1];
size_t sz = read(fd, buffer, MYSIZE);
if (sz < 0)
{ .... report error }
else
buffer[sz] = '\0';
如果在编译时未知大小,则前两行将更改为
char* buffer = malloc(MYSIZE+1);
if (buffer == NULL)
{ ... report an error }
其余部分保持不变,您需要free(buffer)
某处。