LDD3中的setlevel.c程序的问题
在ldd3中的源码包里面,有一个改变console_loglevel的程序,为什么编译通不过呢?
- 1
- 2 #include <stdio.h>
- 3 #include <stdlib.h>
- 4 #include <string.h>
- 5#include <errno.h>
- 6 #define __LIBRARY__ /* _syscall3 and friends are only available through this */
- 27 #include <linux/unistd.h>
- 28
- 29 /* define the system call, to override the library function */
- 30 _syscall3(int, syslog, int, type, char *, bufp, int, len);
- 31
- 32 int main(int argc, char **argv)
- 33 {
- 34 int level;
- 35
- 36 if (argc==2) {
- 37 level = atoi(argv[1]); /* the chosen console */
- 38 } else {
- 39 fprintf(stderr, "%s: need a single arg\n",argv[0]); exit(1);
- 40 }
- 41 if (syslog(8,NULL,level) < 0) {
- 42 fprintf(stderr,"%s: syslog(setlevel): %s\n",
- 43 argv[0],strerror(errno));
- 44 exit(1);
- 45 }
- 46 exit(0);
- 47 }
复制代码
gcc setlevel.后,错误如下:
setlevel.c:30: error: expected declaration specifiers or ‘...’ before ‘syslog’
setlevel.c:30: error: expected declaration specifiers or ‘...’ before ‘type’
setlevel.c:30: error: expected declaration specifiers or ‘...’ before ‘bufp’
setlevel.c:30: error: expected declaration specifiers or ‘...’ before ‘len’
setlevel.c:30: warning: data definition has no type or storage class
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
你这第30行感觉也没有被调用啊
主要的问题是_syscall3(int, syslog, int, type, char *, bufp, int, len);没有返回值,编译器把他看作是一个函数原型的声明。
应该是你用的内核版本的问题,LZ 的内核版本是多少?
2.6.24-23-386
我也不太清楚,ldd中的源代码就是这么写的。我不太清楚_syscall3(int, syslog, int, type, char *, bufp, int, len);
和syslog(8,NULL,level)的关系
LDD3提供的源码是在2.6.10上运行的。2.6版本的子版本之间变化可能比较大,我用2.6.18编译这个程序也报错。LZ 尝试修改一下这个程序,以适应适应你的内核,正好也算练练手。
找到解决方法:
复制代码
感谢分享解决方法
感谢分享啊。这样学习的收获更大。