我正在尝试做一些初学者内核模块/用户级程序通信。我之前得到了使用fdopen()
效果很好的建议,但我发现我需要使用open()
,read()
而write()
不是。我阅读了这些手册页,并认为我将 fopen、fgets、fputs 正确转换为这些,并且我的程序可以编译,但我没有得到所需的输出。
我有一个计时器,如果我输入./userprogram -s (int) (name)
eg ./userprogram -s 5 hello
,5 秒后它将hello
通过与我的内核模块通信打印到控制台。在我切换到这些新功能后,它改为打印/lib/ld-uClibc.so.0
(现在似乎要等待约 5 秒)。我是否还需要更改内核级代码的工作方式?我以为我只是能够更改用户级程序,内核模块将继续像以前一样工作。这是我尝试使用注释掉的原始代码:
// open file
int pFile;
pFile = open("/dev/mytimer", O_RDWR);
if (pFile < 0) {
fprintf (stderr, "mytimer module isn't loaded\n");
return 1;
}
// Check if timer set
if (argc >= 4 && strcmp(argv[1], "-s") == 0) {
lenNum = strlen(argv[2]);
lenName = strlen(argv[3]);
char *ptr = malloc(lenNum+lenName+4);
strncat(ptr, argv[1], 2);//flag
strncat(ptr," ", 1);
strncat(ptr, argv[2], lenNum);//timer length
strncat(ptr," ", 1);
strncat(ptr, argv[3], lenName);//message
/* fputs(ptr, pFile); */
write(pFile, ptr, sizeof(ptr));
/*
while (fgets(line, 256, pFile) != NULL) {
printf("%s", line);
} */
while (read(pFile, ptr, sizeof(ptr)) != 0) {
printf("%s", line);
}
任何建议表示赞赏。