2013-04-25 173 views
0

对于下面的代码片段中,我得到一个错误:无法打开文件C

Unable to open file: No such file or directory 

redirect_ptr是char ** 我试图打印redirect_ptr [0],它打印正确了。任何想法可能存在的问题?

if ((in_fd = open(redirect_ptr[0], O_RDWR | O_CREAT)) == -1) { 
    perror("Unable to open file"); 
    return -1; 
} 
+2

你真的有想打开的文件吗?.. – piokuc 2013-04-25 19:45:06

+0

是的,它应该创建它 – user44273 2013-04-25 19:45:48

+0

添加一个调试打印的文件名 – bobah 2013-04-25 19:48:41

回答

2

当您创建文件时,open()需要额外的参数,即要创建的文件的权限位。 您需要例如

if ((in_fd = open(redirect_ptr[0], O_RDWR | O_CREAT, 0644) == -1) 

这也许不是你的错误的原因,但是如果错误是“没有这样的文件或目录”,那么这正是什么是错的,你的程序无法找到该文件。

也许您在文件名中有一些不可打印的字符,或者名称以空格或换行符或类似名称结尾,或者拼写错了名称或错误的大小写,或者路径是相对路径与基于当前工作目录的文件不匹配。

在一对''中打印文件名通常很有帮助,所以你可以看看是否有一些不应该存在的空白。添加一个

printf("Filename: '%s'\n",redirect_ptr[0]); 

到您的代码。如果它看起来不错,对打印出的文件名做一个ls -l,站在流程的工作目录中。