【发布时间】:2014-02-01 00:37:54
【问题描述】:
所以我正在编写一个涉及写入 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;
这几乎是从教程中复制和粘贴的。
谢谢!
【问题讨论】:
标签: c linux vim linux-kernel kernel