이 질문을 봐주셔서 감사합니다.
저는 읽기 및 쓰기 작업이 포함된 간단한 기타 문자 장치를 작성하고 있습니다. 계속 읽어주세요...
TEXT
이렇게 하면 다음 코드는 원하는 텍스트를 한 번만 인쇄합니다.
cat /dev/mydevice01
읽기 기능에 대한 코드입니다.
static ssize_t my_read(struct file *file, char __user *buff, size_t count, loff_t *ppos)
{
char *print_str = TEXT;
if (*ppos != 0)
return 0;
if ((count < TEXT_LENGTH) || (copy_to_user(buff, print_str, TLF_ID_LENGTH)))
return -EINVAL;
*ppos += count;
return count;
}
TEXT
을 사용하여 정의되므로 #define
다음과 같습니다.TEXT_LENGTH
이 코드는 좀 너무 복잡한 것 같아서 수정하려고 합니다. 수정된 코드는 다음과 같습니다.사용할 때까지 필요한 텍스트를 계속 인쇄합니다.SIGINT
( Ctrl+C) 프로세스:
static ssize_t my_read(struct file *file, char __user *buff, size_t count, loff_t *ppos)
{
char *print_str = TLF_ID;
if (copy_to_user(buff, print_str, TLF_ID_LENGTH))
return -EINVAL;
return count;
}
저는 Linux 커널 프로그래밍을 처음 접했습니다. 코드에 어떤 문제가 있는지 알고 싶습니다. 가능하다면 한 줄의 코드로 동일한 기능을 구현할 수 있습니다. 미리 감사드립니다!
답변1
나는 그것을 스스로 알아 냈고 비슷한 것을 찾는 다른 사람들에게 대답을 남길 것입니다.
static ssize_t my_read(struct file *file, char __user *buff, size_t count, loff_t *ppos)
{
char *print_str = TEXT;
int len = TEXT_LENGTH;
return simple_read_from_buffer(buff, count, ppos, print_str, len);
}
이것은 예상대로 작동합니다. 이러한 모듈을 포함하는 것을 잊지 마십시오.
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/miscdevice.h>
#include <linux/module.h>
도움을 주셔서 감사합니다 :).