gpt4 book ai didi

c - 为什么我的 popen 失败

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:19 27 4
gpt4 key购买 nike

我的c代码是

size_t n=0;
char *str = (char *)malloc(sizeof(char)* 1000)
FILE *fp = popen(" cat /conf/a.txt" ,"r" );
// my program comes in this function only if /conf/a.txt exists

getline(&str, &n, fp); <== crash if fp is null

我的调试器显示有时我得到的 fp 为空,因此我的程序在第 6 行崩溃。有时我得到有效的指针并且它通过了。

控制此行为的是什么。我在上面的代码中找不到问题。一些帮助表示赞赏。

我知道我可以检查 fp==null 但这不是我的问题。我只是想知道,知道该文件肯定存在,为什么 fp 在某些情况下会变成 null。

popen 的人说 如果 fork(2) 或 pipe(2) 调用失败,或者无法分配内存,popen() 函数将返回 NULL。

我在崩溃后检查过,系统有足够的内存..

最佳答案

strerrorerrno是你的 friend 。

链接的 C++ 引用示例:

/* strerror example : error list */
#include <stdio.h>
#include <string.h>
#include <errno.h>

int main ()
{
FILE * pFile;
pFile = fopen ("unexist.ent","r");
if (pFile == NULL)
printf ("Error opening file unexist.ent: %s\n",strerror(errno));
return 0;
}

示例输出:

Error opening file unexist.ent: No such file or directory

使用这种在失败后检查 errno 的方法可以让您更好地诊断问题,因为它会打印出更具体的错误消息。无法打开文件的原因有很多:没有权限、路径错误、文件被另一个进程锁定、读取过程中出现 IO 错误等。最终您的问题似乎是在问为什么打开失败。使用这些工具将为您解答这个问题。

标签更改更新:

我已经引用并链接到 C++ 资源,但是 sterror 和 errno 都可以在 C 中通过包含 errno.h 获得。

关于c - 为什么我的 popen 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25188891/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com