linux cat:没有这样的文件或目录

时间:2013-10-10 13:34:52

标签: c linux grep cat printf

我在Linux2.4,C和使用gcc中有一个特殊的问题。

有一个小程序可以使用cat& amp; grep cmd。

#define tmpFile "/tmp/cli_tmp_file.txt"
#define MAX_CMD 50

void getRange()
{
        char cmd[MAX_CMD+1];

        // remove the temp file first
        snprintf(cmd, MAX_CMD, "rm -f %s", tmpFile);
        system(cmd);
        // create temp file
        snprintf(cmd, MAX_CMD, "touch %s",tmpFile);
        system(cmd);
        // execute the command
        snprintf(cmd, MAX_CMD, "echo \"Range:Max val 500\" > %s",tmpFile);
        system(cmd);
        // dump out the temp file so user could see
        snprintf(cmd, MAX_CMD, "cat %s|grep \"Range\"", tmpFile);
        system(cmd);
        // remove the temp file
        snprintf(cmd, MAX_CMD, "rm -f %s", tmpFile);
        system(cmd);
}

当我执行此代码时,我得到输出为 cat:/tmp/cli_tmp_file.txt:没有这样的文件或目录

但是,该文件是在tmp文件夹中创建的,其内容为

# pwd
/tmp
# ls -l
-rw-r--r--    1 root     root           68 Oct 10 12:54 cli_tmp_file.txt

#more /tmp/cli_tmp_file.txt
Range:Max val 500

在手动执行相同的cmd时,它会显示预期的输出

# cat /tmp/cli_tmp_file.txt|grep Range
Range:Max val 500

任何帮助将不胜感激。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

这是一个(托管但被忽略)缓冲区溢出,echo命令超过50个字符。该命令被snprintf()截断,但无论如何都要运行它。检查返回值!