当前位置: 技术问答>linux和unix
ldd 3rd 程序代码疑问
来源: 互联网 发布时间:2016-09-24
本文导语: hi all: 在看ldd(3rd)的时候有一段代码: int scull_trim(struct scull_dev *dev) { struct scull_qset *next, *dptr; int qset = dev->qset; /* "dev" is not-null */ int i; for (dptr = dev->data; dptr; dptr = next) { /*...
hi all:
在看ldd(3rd)的时候有一段代码:
int scull_trim(struct scull_dev *dev)
{
struct scull_qset *next, *dptr;
int qset = dev->qset;
/* "dev" is not-null */
int i;
for (dptr = dev->data; dptr; dptr = next) { /* all the list items */
if (dptr->data) {
for (i = 0; i data[i]);
kfree(dptr->data);
dptr->data = NULL;
}
next = dptr->next;
kfree(dptr);
}
dev->size = 0;
dev->quantum = scull_quantum;
dev->qset = scull_qset;
dev->data = NULL;
return 0;
}
疑问:next初始化为空,怎么还放在for循环里呢?
本来怀疑是不是源码代也的有误,但是看到网上更新的代码也是一样的。估计这么写还是有原因的
请大家指示啊。。。
在看ldd(3rd)的时候有一段代码:
int scull_trim(struct scull_dev *dev)
{
struct scull_qset *next, *dptr;
int qset = dev->qset;
/* "dev" is not-null */
int i;
for (dptr = dev->data; dptr; dptr = next) { /* all the list items */
if (dptr->data) {
for (i = 0; i data[i]);
kfree(dptr->data);
dptr->data = NULL;
}
next = dptr->next;
kfree(dptr);
}
dev->size = 0;
dev->quantum = scull_quantum;
dev->qset = scull_qset;
dev->data = NULL;
return 0;
}
疑问:next初始化为空,怎么还放在for循环里呢?
本来怀疑是不是源码代也的有误,但是看到网上更新的代码也是一样的。估计这么写还是有原因的
请大家指示啊。。。
|
for (dptr = dev->data; dptr; dptr = next) { /* all the list items */
if (dptr->data) {
for (i = 0; i data[i]);
kfree(dptr->data);
dptr->data = NULL;
}
next = dptr->next; //这里还有一句啊,dptr = next在循环的最后运行
整个代码就是遍历所有链表,并且释放链表的空间的吧,你看人家函数名字就知道了scull_trim
if (dptr->data) {
for (i = 0; i data[i]);
kfree(dptr->data);
dptr->data = NULL;
}
next = dptr->next; //这里还有一句啊,dptr = next在循环的最后运行
整个代码就是遍历所有链表,并且释放链表的空间的吧,你看人家函数名字就知道了scull_trim
|
正解
|
没错的,功能是遍历所有链表并释放空间