首页 > 解决方案 > strcpm() 它不给我平等

问题描述

我试图从用户那里获取缓冲区,当缓冲区等于 00 B 或 00 W 时,它会跳转到 if 语句,但由于某种原因缓冲区最终大于 0。我已经打印出缓冲区是什么,它是提示时为 00 B 或 00 W。为什么是这样??我在比较错误的东西吗?

ssize_t chess_write(struct file *pfile, const char __user *buffer, size_t length, loff_t *offset)
{
    int black;
    int white;

    sprintf(msg, "%s(%zu letters)", buffer, length);
    msg_size = strlen(msg);

    LOG_INFO("In function %s\n", __FUNCTION__);

    LOG_INFO("buffer test in write %s", buffer);    

    black = strcmp(buffer, "00 B");
    white = strcmp(buffer, "00 W");
        if (black == 0)
        {
            LOG_INFO("Chess: Initiate chess as black pieces\n");
        }
        else if (black < 0)
        {
            LOG_INFO("Chess: black is less than 0\n");
        }
        else if (black > 0)
        {
            LOG_INFO("Chess: black is greater than 0\n");
        }
        else if (white == 0)
        {
            LOG_INFO("Chess: Initiate chess as white pieces\n");
        }

    LOG_INFO("Chess: Wrote %zu characters from the user\n", length);
    return length; // return bytes wrote
}

我得到的结果是这样的

[Apr29 18:58] [chess] Module Started
[  +0.000005] [chess] Device class resgistered correctly
[  +0.000077] [chess] Device created correctly
[  +3.632050] [chess] In function chess_open
[  +0.000706] [chess] In function chess_write
[Apr29 19:00] [chess] In function chess_write
[  +0.000003] [chess] buffer test in write 00 B
[  +0.000001] [chess] Chess: black is greater than 0
[  +0.000001] [chess] Chess: Wrote 5 characters from the user
[  +0.001368] [chess] In function chess_read
[  +0.000002] [chess] buffer test in read 00 B
              (5 letters)
[  +0.000001] [chess] Chess: black is greater than 0
[  +0.000002] [chess] Chess: Read 16 characters to the user
[  +0.002089] [chess] In function chess_write
[  +0.000002] [chess] buffer test in write 01
[  +0.000000] [chess] Chess: black is greater than 0
[  +0.000001] [chess] Chess: Wrote 3 characters from the user
[  +0.007073] [chess] In function chess_read
[  +0.000001] [chess] buffer test in read 01
              (3 letters)
[  +0.000001] [chess] Chess: black is greater than 0
[  +0.000001] [chess] Chess: Read 14 characters to the user

附言。我在另一个文件中处理 LOG_INFO

#define _CONFIG_PRINTK(once, level, fmt, ...)                       \
    do{                                     \
        printk##once(KERN_##level "[" MODULE_NAME "] " fmt,     \
                ##__VA_ARGS__);                 \
    } while(0)

#define LOG_INFO(format, ...) _CONFIG_PRINTK(, INFO, format, ##__VA_ARGS__)

#define LOG_WARNING(format, ...) _CONFIG_PRINTK(, WARNING, format, ##__VA_ARGS__)

#define LOG_ERROR(format, ...) _CONFIG_PRINTK(, ERR, format, ##__VA_ARGS__)

标签: cdevice-driver

解决方案


推荐阅读