gpt4 book ai didi

c - 换行符未出现在 proc 文件中

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:39 25 4
gpt4 key购买 nike

所以我正在编写一个涉及写入 proc 文件的 linux 内核模块。不幸的是,换行符出了点问题。如果我用 vim 打开它,它显示为“num^@num^@num^@”。如果我抓它,它会说“numnumnum”。它应该在每个“num”的末尾换行。

诚然,我将每个条目写入 proc 文件的代码似乎有点老套。

    bufSize = snprintf(str,0,"%lu\n",var);
str = (char*)kmalloc(bufSize*sizeof(char),GFP_KERNEL);
snprintf(str,bufSize,"%lu\n",var);
memcpy(msg+msglen,str,bufSize);
msglen+=(bufSize);
kfree(str);

我不知道这个字符串会有多长,所以第一个snprintf得到了缓冲区需要的长度。缓冲区被初始化,然后再次调用 snprintf。然后将该字符串复制到 msg,其中包含 proc 文件的数据。指针增加现有消息的长度。

    int procfile_read(char *buffer, char **buffer_location, off_t offset, int
buffer_length, int *eof, void *data) {

int ret;

printk(KERN_INFO "procfile_read (/proc/%s) called\n", PROCFS_NAME);

if (offset > 0) {
/* we have finished to read, return 0 */
ret = 0;
} else {
/* fill the buffer, return the buffer size */
memcpy(buffer, msg, msglen);
ret = msglen;
}

return ret;

这几乎是从教程中复制和粘贴的。

谢谢!

最佳答案

缓冲区太小

bufSize = snprintf(str,0,"%lu\n",var);
// + 1
str = (char*)kmalloc((bufSize + 1)*sizeof(char),GFP_KERNEL);
// + 1
snprintf(str,bufSize + 1,"%lu\n",var);
// + 1
memcpy(msg+msglen,str,bufSize + 1);
// no + 1 here
// Note that msglen is the string length. Add 1 for the size needed.
msglen+=(bufSize);
kfree(str);

关于c - 换行符未出现在 proc 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21492627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com