Function fopen(filename, "r") 在我的 Ubuntu 上不起作用 [关闭]

问题描述 投票:0回答:1

我正在运行一个简单的程序来打开一个文件。有关操作系统和处理器的一些细节:

 .Ubuntu 64bits
 .Processor AMD Ryzen 7

每次我尝试执行时总是收到此错误:

No such file or directory
已经安装了 sudo apt-get install lib32z1 但问题依然存在。这是 C 程序的代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <errno.h>
    #include <fcntl.h>
> 

void main(void)
{

    char* filename = "~/Documents/Manipulation/addresses.txt";
    
    printf("\nUsing fopen fuction");
    
    FILE* arch = fopen(filename, "r");

    if(arch == 0)
    {
      perror("fopen");
      printf("\n arch is null");
      exit(0);
    }
    else
    {
        printf("\n Arch is opened..");
    }
    
}

一个重要的细节是当我使用该功能时

open("addresses", O_RDONLY)
它运行良好。请参见下面的代码:

int fd;

printf("\nUsing open fuction");


fd = open ("addresses", O_RDONLY);
if(fd == 0)
{
    fprintf(stderr, "can't open %s: %s\n", filename, strerror(errno));
    exit(1);

}
else
{
    printf("\n Arch is opened..");
}

有人知道如何解决这个问题吗?

c linux function ubuntu pointers
1个回答
2
投票

如上评论所述,路径文字中的波浪字符不会被翻译成用户的主目录。您可能需要在 Linux 系统上执行的操作是检索当前用户主目录信息,如前一个解决方案中所述用户主目录.

利用此解决方案,以下是您的代码的重构版本。

#include <unistd.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>

int main(void)
{
    struct passwd *pw = getpwuid(getuid());

    const char *homedir = pw->pw_dir;

    char filename[200];

    strcpy(filename, homedir);
    strcat(filename, "/Documents/Manipulation/addresses.txt");

    printf("\nUsing fopen fuction");

    FILE* arch = fopen(filename, "r");

    if(arch == 0)
    {
        perror("fopen");
        printf("\n arch is null");
        exit(0);
    }
    else
    {
        printf("\n Arch is opened..");
    }
    return 0;
}

注意添加了“unistd.h”和“pwd.h”包含文件。通过那一点重构,下面是程序的测试执行。

@Vera:~/C_Programs/Console/LinuxFile/bin/Release$ ./LinuxFile 

Using fopen fuction
 Arch is opened..

试试看它是否符合您项目的精神。

© www.soinside.com 2019 - 2024. All rights reserved.