无法从C linux中的/ proc位置打开文件夹

时间:2016-07-23 15:03:16

标签: linux api proc

我将在/ proc的每个目录中读取“comm”文件。我的程序可以看到目录列表,但是当我尝试在此目录中打开文件夹时出现错误。我的系统是Debian Linux硬件Beaglebone Black。我正在学习linux下的编程,所以我有很多问题(有时候很愚蠢)。

代码列表:

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>

#include <string.h>
#include <fcntl.h>

int main()
{  
    char path[50] = {0};
    register struct dirent *dirbuf;
    char* dirname = "/proc";
    DIR *fdir;

    fdir = opendir(dirname);
    if (NULL == fdir)
    {  
        printf("Can't open %s\n", dirname);
        return;
    }  

    while(( dirbuf = readdir(fdir)) != NULL)
    {  
        if ((strcmp(dirbuf->d_name, ".") == 0)||(strcmp(dirbuf->d_name, "..") == 0))
        {  
            continue;
        }  

        printf("folder name: %s\n", dirbuf->d_name);
        strcat(path, dirbuf->d_name);
        strcat(path, "/comm");
        printf("path: %s\n", path);

        int fd = open(path, O_RDONLY);
        if ( -1  == fd)
        {  
            printf("Can't open file %s\n", path);
        }  
        else
        {  
            //read file
            close(fd);
        }  
        memset(path, 0, strlen(path) + 1); //clear path buffer

    }  
    closedir(fdir);
    return 0; 
}

从Linux控制台登录:

enter image description here

1 个答案:

答案 0 :(得分:0)

您需要使用完整路径打开文件。即:/proc/PID/comm而不是PID/comm

您可以使用以下内容格式化路径:

char* path[PATH_MAX];
snprintf(path, PATH_MAX, "/proc/%s/comm", dirbuf->d_name);

正确格式化路径。