【问题标题】:Opening a file gives unexpected return value打开文件会产生意外的返回值
【发布时间】:2016-05-12 08:54:29
【问题描述】:

谁能解释一下,为什么文件打开不成功?为什么打印“文件”会给出-1?是char *source的问题吗?

int opf(char *source){
    int file;
    file=open(source,O_RWR);
    printf("%d",file); 
}

有没有可能做这样的事情: 文件在另一个目录中,所以

int opf(char *source){
    int file;
    file=open("some_directory/ %s",source,O_RWR);
    printf("%d",file); 
}

在这里,我得到“从指针生成整数而不进行强制转换”错误。我尝试了很多不同的方法,但我想问题在于我没有正确掌握这些概念。

【问题讨论】:

  • 什么是O_RWR? Do you mean O_RDWR?
  • 至于你的第二个和不相关的问题(你真的应该发布两个问题)搜索并阅读snprintf
  • 这与指针无关;您正在尝试使用open,就好像它是printf。但它不是printf。这是open
  • 你不能编造一些东西并期望它们能正常工作,甚至在你尝试它们时期望得到有用的错误消息。

标签: c file file-io errno


【解决方案1】:

来自open()man page强调我的

成功完成后,该函数应打开文件并返回一个非负整数,表示编号最小的未使用文件描述符。 否则,应返回-1 并设置errno 以指示错误。如果函数返回 -1,则不应创建或修改任何文件。

因此,在您的情况下,open() 失败了。检查errno 以获取更多详细信息。 errno 的所有可能值也记录在链接页面中。

话虽如此,

  1. O_RWR 似乎不是有效的模式O_RDWR 是。
  2. 对于第二种方法,您可以先使用sprintf()/snprintf() 创建path 字符串,然后将其传递给open()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多