首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stat函数调用

stat函数调用
EN

Stack Overflow用户
提问于 2013-10-29 23:48:28
回答 2查看 733关注 0票数 0

我想使用stat函数。但我不知道如何使用变量。我从其他进程中获取目录和子目录的值。

代码语言:javascript
复制
if( stat( DIRECTORY/sub-dir, &st ) == 0 )
{--}

我收到如下错误消息:"error: invalid operands to binary /"

EN

回答 2

Stack Overflow用户

发布于 2013-10-30 00:25:54

您需要创建一个字符串并将其传递给stat()。假设VLA支持(可用相关选项的C99或C11 ),则:

代码语言:javascript
复制
char path[strlen(DIRECTORY) + strlen(subdir) + sizeof("/")];
snprintf(path, sizeof(path), "%s/%s", DIRECTORY, subdir);
struct stat st;
if (stat(path, &st) != 0)
    ...oops!...
else
    ...process data...

如果你不支持VLA,你可以使用固定大小的数组,或者使用malloc()free()

以下任一项:

代码语言:javascript
复制
char path[PATH_MAX];  // Beware: not always defined; _POSIX_PATH_MAX?

或者:

代码语言:javascript
复制
size_t pathlen = strlen(DIRECTORY) + strlen(subdir) + sizeof("/");
char *path = malloc(pathlen);
if (path != 0)
{
    snprintf(path, pathlen, "%s/%s", DIRECTORY, subdir);
    struct stat st;
    if (stat(path, &st) != 0)
        ...oops!...
    else
        ...process data...
    free(path);
}
票数 2
EN

Stack Overflow用户

发布于 2013-10-29 23:49:27

它应该是

代码语言:javascript
复制
if( stat( "DIRECTORY/sub-dir", &st ) == 0 )

请参阅stat()手册页:

代码语言:javascript
复制
int stat(const char *path, struct stat *buf);

第一个参数(路径)应为const char *类型,因此路径应以类似于"DIRECTORY/sub-dir"的字符串形式提供

如果DIRECTORYsub_dir是变量,那么您必须将它们连接到第三个变量中:

代码语言:javascript
复制
char buf[256];
sprintf(buf, "%s/%s", DIRECTORY, sub_dir);
if( stat( buf, &st ) == 0 )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19663042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档