linux,进程控制块的数据结构(task_struct)

谁知道,Ubuntu系统中,如何查找进程控制块的数据结构,据说是:task_struct,
求教啊,他在哪里啊,我找不到啊,,,

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于Linux内核中通过hash表将pid转化为task_struct地址的计算
内核中通过hash表把pid快速转化为task_struct的地址,Linux内核中有4张hash表,在初始化期间会为4张hash表动态分配地址。但转化的计算问题中,《深入理解Linux内核》中提出,对于一个有512MB RAM系统,每张表就存储在4个页框中,每张表可以有2048个表项,不知道这个是如何计算而来的。
About CLONE_PARENT_SETTID in Linux
I think it is prcess after the initialize of task_struct which is initialized in copy_process.
linux内核模块调用内核中的函数
我编写了一个简单的内核模块,想验证一下内核workqueue的功能。 如下: ``` #include <linux/module.h> #include <linux/init.h> #include <linux/workqueue.h> #include <linux/sched.h> #include <linux/nsproxy.h> //static struct workqueue_struct *queue=NULL; //extern int copy_namespaces(unsigned long flags, struct task_struct *tsk); static struct work_struct work; static void work_handler(struct work_struct *data) { struct task_struct *base_task = find_task_by_vpid(18572); printk(KERN_ALERT"work handler function.\n"); printk(KERN_ALERT"current--------> %d.\n", current->pid); //copy_namespaces(CLONE_NEWUTS, current); get_nsproxy(base_task->nsproxy); switch_task_namespaces(current, base_task->nsproxy); } static int __init test_init(void) { //queue=system_unbound_wq //create_singlethread_workqueue("hello world");/*创建一个单线程的工作队列*/ //if (!queue) // goto err; INIT_WORK(&work,work_handler); queue_work(system_unbound_wq, &work); return 0; } static void __exit test_exit(void) { //destroy_workqueue(queue); printk(KERN_ALERT "caoshufeng module exit"); } MODULE_LICENSE("GPL"); module_init(test_init); module_exit(test_exit); ``` 这是makefile: obj-m += queue.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 模块make成功,但是无法insomd dmesg中有如下错误: [ 9806.426471] queue: Unknown symbol switch_task_namespaces (err 0) [ 9806.426554] queue: Unknown symbol find_task_by_vpid (err 0) 我已经include了相应的头文件,为啥还是找不到symbol呢?
linux内核源码sched.h头文件问题
在sched.h头文件里定义这两种结构体,却在另外一个头文件里实现,这样 struct nsproxy; struct user_namespace; 在struct task_struct这个结构体中又定义struct nsproxy变量,觉得这样有问题呢,我试验了下,编译会报错,内核是怎么编译通过的
关于Linux内核copy_to_user的问题
我写了一个Linux的内核代码,现在要将内核中结构体数组送到用户中去,但是老是报错,求大神帮看一下代码。。。。 int sys_ptreecall(struct prinfo __user *buf, int nr) { n=0; struct prinfo buff[nr]; printk("%d\n",sizeof(buff)); struct task_struct *p,*tmp; read_lock(&tasklist_lock); int j; p=&init_task; for_each_process(p) { buff[p->pid].pid=p->pid; printk("%d\t",buff[p->pid].pid); j=0; for(;j<16;j++) { if(p->comm[j] == '\0') { buff[p->pid].comm[j] = '\0'; break; } else buff[p->pid].comm[j] = p->comm[j]; } printk("%s\t",&(buff[p->pid].comm)); buff[p->pid].state=p->state; printk("%d\t",buff[p->pid].state); buff[p->pid].parent_pid=p->parent->pid; printk("%d\n",buff[p->pid].parent_pid); tmp=list_entry(p,struct task_struct,children); buff[p->pid].first_child_pid=tmp->pid; tmp=list_entry(p,struct task_struct,sibling); buff[p->pid].next_sibling_pid=tmp->pid; buff[p->pid].uid=p->cred->uid; //p=next_task(p); } read_unlock(&tasklist_lock); //printk("success unlock\n"); //traverse(buf,1); if(copy_to_user((struct prinfo *)buf,buff,sizeof(buff))) { printk("fail\n"); return 0; } return 0; } ``` ```
【c语言数据结构】遍历二叉树
代码一运行就停止工作,求助大神 ``` #include<stdio.h> #include<stdlib.h> typedef struct treeNode//定义 { int data; struct treeNode *left; struct treeNode *right; }treenode,*TreeNode; void pre(TreeNode node)//前序遍历 { if(node==NULL) return; printf("%d ", node->data); pre(node->left); pre(node->right); } void mid(TreeNode node)//中序遍历 { if(node==NULL) return; mid(node->left); printf("%d ", node->data); mid(node->right); } void beh(TreeNode node)//后序遍历 { if(node==NULL) return; beh(node->left); beh(node->right); printf("%d ", node->data); } void tree(TreeNode one)//定义一个二叉树 { one=(TreeNode*)malloc(sizeof(treenode)); one->data=3; one->left->data=9; one->right->data=20; one->right->left->data=15; one->right->right->data=7; } void main()//主方法 { TreeNode one; tree(one); printf("该二叉树的前序遍历为:\n"); pre(one); printf("该二叉树的中序遍历为:\n"); mid(one); printf("该二叉树的后序遍历为:\n"); beh(one); } ```
数据结构中函数传值问题
在C++数据结构中有这样的一段代码 ``` typedef int ElemType; typedef struct { int stacksize; ElemType *base;//Top和base都是来存取栈的位置 区索引作用 ElemType *top; }sqStack; //创建stack void sq_Init(sqStack *s) { s->base = (ElemType*)malloc(Stack_Init_Size*sizeof(ElemType)); if(!s->base) exit(0); s->top = s->base; s->stacksize = Stack_Init_Size; } ``` 那在我需要调用sq_Init函数的时候,应该怎样传值。 是 ``` int main() { sqStack s; sq_Init(&s); return 0; } ``` 还是 ``` int main() { sqStack *s; sq_Init(s); return 0; } ``` 为什么呢?提前谢谢大家了!
CC2640R2F作为从机,如何获取主机的RSSI?
网上有很多抄的CC2541 simple_peripheral的代码,用CC2640R2F实现不生效,我用的simplelink_cc2640r2_sdk_1_40_00_45,网上说直接在callback里面加 ``` static gapRolesCBs_t SimpleBLEPeripheral_gapRoleCBs = { SimpleBLEPeripheral_stateChangeCB, // GAPRole State Change Callbacks simpleBLEPeripheralRssiCB }; ``` 但是gapRolesCBs_t 在peripheral.h中定义为 ``` typedef struct { gapRolesStateNotify_t pfnStateChange; //!< Whenever the device changes state } gapRolesCBs_t; ``` 需要使用peripheral_broadcaster.h中的定义 ``` typedef struct { gapRolesStateNotify_t pfnStateChange; //!< Whenever the device changes state gapRolesRssiRead_t pfnRssiRead; //!< When a valid RSSI is read from controller } gapRolesCBs_t; ``` .h换了很多东西都要跟着换,然而测试并没有进入回调,希望有大神指导一下
数据结构__考试题,求大神帮忙
typedef int ElemType; typedef struct{ ElemType elem[N];//n为分配的最大空间量 int length; } SqList; 试编写在线性表L中查找元素x的高效算法,若查询成功,则删除该元素,返回真,否则返回假。 bool SeachX(SqList &L,ElemType x){ ......................................}
stm32延时函数可行和不可行
# 1. 可行的延时 #MeLED.c ``` include "MELED.h" void LED_TIM_Config(void) { TIM_TimeBaseInitTypeDef LED_TIM_Struct; TIM_OCInitTypeDef TIM_OCInitConfig; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); TIM_DeInit(TIM4); //GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE); TIM_OCInitConfig.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitConfig.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitConfig.TIM_OCPolarity = TIM_OCPolarity_Low; LED_TIM_Struct.TIM_Prescaler = (36000 - 1); LED_TIM_Struct.TIM_Period = 2 - 1; LED_TIM_Struct.TIM_ClockDivision = TIM_CKD_DIV1; LED_TIM_Struct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, &LED_TIM_Struct); TIM_ClearFlag(TIM4, TIM_FLAG_Update); TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); TIM_OC1PreloadConfig(TIM4, ENABLE); TIM_Cmd(TIM4, ENABLE); } ``` ``` void LED_NVIC_Config(void) { NVIC_InitTypeDef LED_NVIC_Struct; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); LED_NVIC_Struct.NVIC_IRQChannel = TIM4_IRQn; LED_NVIC_Struct.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级 LED_NVIC_Struct.NVIC_IRQChannelSubPriority = 0;//响应优先级 LED_NVIC_Struct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&LED_NVIC_Struct); } ``` int i = 0;//注意该变量是定义在MeLED.c文件中的 ``` void TIM4_IRQHandler(void) { if(TIM_GetITStatus(TIM4,TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM4, TIM_IT_Update); i++; } } ``` ``` void My_Systick_Delay(uint32_t nTime) { i = 0; while(nTime != i); } ``` #MeLED.h ``` #ifndef __MELED_H #define __MELED_H #include "stm32f10x.h" #include "led.h" #include "Oper_System_Delay.h" void MELED_Init(void); void MELED_PWM_Init(void); void LED_TIM_Config(void); void LED_NVIC_Config(void); void TIM4_IRQHandler(void); void My_Systick_Delay(uint32_t nTime); #endif ``` #main.c ``` #include "stm32f10x.h" #include "usart.h" #include "led.h" #include "RTC_Time.h" #include <stdio.h> #include "MeLED.h" #include "Delay.h" ``` ``` int main(void) { while(1) { My_Systick_Delay(1000); printf("Delay over\n"); } } ``` #2.不可行的延时(我想知道为什么不可行?) #Delay.c ``` #include "Delay.h" void My_Systick_Delay(uint32_t nTime) { Attain_delay = 0; while(nTime != Attain_delay);//程序会不停的在这里循环 } ``` #Delay.h ``` #ifndef __Delay_H #define __Delay_H #include "stm32f10x.h" #include "stm32f10x_tim.h" #include "stm32f10x_it.h" #include "core_cm3.h" #include "Oper_System_Delay.h" #endif ``` #Oper_System_Delay.h ``` #ifndef __Oper_System_Delay_H #define __Oper_System_Delay_H #include "stm32f10x.h" #include "stm32f10x_tim.h" #include "stm32f10x_it.h" static uint32_t Attain_delay; //void Oper_System_Delay(); #endif ``` #MeLED.c ``` void TIM4_IRQHandler(void) { if(TIM_GetITStatus(TIM4,TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM4, TIM_IT_Update); Attain_delay++; } } ``` 所以第2点有人知道为什么不可行吗?最好可以提供第1和第2的差别在哪?
C语言 Union和Struct成员赋值问题
``` #include "pch.h" #include <iostream> #include <bitset> using namespace std; typedef struct { union { uint32_t _32; uint16_t _16; uint8_t _8[2]; }gpr[8]; uint32_t eax = gpr[0]._32; uint32_t ecx = gpr[1]._32; }CPU_State; int main() { CPU_State cpu; //先测试gpr0和gpr2 //随便写的数据 cpu.gpr[0]._32 = 0xabcdf1f0; cpu.gpr[1]._32 = 0xabcdf1f1; //现在只能输出未初始化的数据 //我的电脑输出cccccccc和cccccccc cout << hex << cpu.eax << endl; cout << hex << cpu.ecx << endl; } ``` 我现在给gpr[0]._32和gpr[1]._32赋值。 现在输出的eax和ecx的值是错的。 我想把eax和ecx的值关联与gpr[0]._32和gpr[1]._32。 限定只能修改结构体的定义。 请问我该如何更改CPU_State这个结构体的定义,使得eax,ecx的值分别等于gpr[0]._32和gpr[1]._32。
这是一个关于数据结构的结构体相等问题
``` #include<iostream> #include<conio.h> #include<string.h> #define OK 1 #define MAXSIZE 100 using namespace std; typedef int Status; typedef struct { char name[5]; float price; }Book; typedef Book ElemType; typedef struct { ElemType *elem; int length; }SqList; Status InitList(SqList &L) { //L.elem=new ElemType[MAXSIZE]; L.elem=new ElemType[MAXSIZE]; if(!L.elem) exit(-1); L.length=0; return OK; } Status GetList(SqList L,int i,ElemType &book) { if(i<1||i>L.length) exit(-1); else book=L.elem[i-1]; return OK; } int LocateElem(SqList L,ElemType e) { int i; for( i=0;i<L.length;i++) if(L.elem[i]==e) return i+1; return 0; } int main() { SqList L; InitList(L); L.elem[0].price=0; L.length++; L.elem[1].price=1; L.length++; ElemType ceshi; GetList(L,2,ceshi); LocateElem(L,ceshi); cout<<ceshi.price; getch(); return 0; } ``` 这是我写的代码,编译后报错 --------------------Configuration: 线性表 - Win32 Debug-------------------- Compiling... 线性表.cpp E:\数据结构\线性表.cpp(41) : error C2784: 'bool __cdecl std::operator ==(const class std::allocator<_Ty> &,const class std::allocator<_U> &)' : could not deduce template argument for 'const class std::allocator<_Ty> &' from 'Book' E:\数据结构\线性表.cpp(41) : error C2784: 'bool __cdecl std::operator ==(const class std::istreambuf_iterator<_E,_Tr> &,const class std::istreambuf_iterator<_E,_Tr> &)' : could not deduce template argument for 'const class std::istreambuf_iterator<_ E,_Tr> &' from 'Book' E:\数据结构\线性表.cpp(41) : error C2784: 'bool __cdecl std::operator ==(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : could not deduce template argument for 'const class std::rev erse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' from 'Book' E:\数据结构\线性表.cpp(41) : error C2784: 'bool __cdecl std::operator ==(const struct std::pair<_T1,_T2> &,const struct std::pair<_T1,_T2> &)' : could not deduce template argument for 'const struct std::pair<_T1,_T2> &' from 'Book' E:\数据结构\线性表.cpp(41) : error C2676: binary '==' : 'Book' does not define this operator or a conversion to a type acceptable to the predefined operator Error executing cl.exe. 线性表.exe - 5 error(s), 0 warning(s) 经过测验,是查找线性表函数LocateList中的if(L.elem[i]==e)发生错误,也就是结构体匹配出现了问题,请问完成结构体匹配,代码该如何修改呢?
struct里的那句Step(int xx,int s):x(xx),steps(s){}有什么作用?
![图片说明](https://img-ask.csdn.net/upload/202002/15/1581734243_31939.jpg)
malloc与realloc问题(C数据结构)
如下代码所示,关于malloc与realloc出现5处错误: ``` #include <stdio.h> #include <stdlib.h> #define STACK_INIT_SIZE 100; #define STACKINCREMENT 10; typedef struct{ int *base; int *top; int stacksize; }SqStack; void InitStack(SqStack S){ S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int)); S.top=S.base; S.stacksize=STACK_INIT_SIZE; }//___________________InitStack_______________________ void Push(SqStack S,int e){ if(S.top==S.base){ S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int)); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top=e; S.top++; } void main(){ SqStack S; InitStack(S); Push (S,5); } ``` SqStack.c D:\VC6\pvc6\COMMON\MSDEV98\BIN\SqStack.c(13) : error C2143: syntax error : missing ')' before ';' D:\VC6\pvc6\COMMON\MSDEV98\BIN\SqStack.c(13) : error C2059: syntax error : ')' D:\VC6\pvc6\COMMON\MSDEV98\BIN\SqStack.c(13) : error C2100: illegal indirection D:\VC6\pvc6\COMMON\MSDEV98\BIN\SqStack.c(20) : error C2143: syntax error : missing ')' before ';' D:\VC6\pvc6\COMMON\MSDEV98\BIN\SqStack.c(20) : error C2143: syntax error : missing ';' before ')' Error executing cl.exe. SqStack.obj - 5 error(s), 0 warning(s) 求大佬解答~~
error C2061: 语法错误: 标识符“PUSB_CONFIGURATION_DESCRIPTOR”该标识符已经定义?
DWORD GetInterfaceDescriptor(UINT ConfigIdx, UINT InterfIdx, UINT AltIdx, PUSB_INTERFACE_DESCRIPTOR Desc); typedef struct _USB_INTERFACE_DESCRIPTOR { UCHAR bLength; UCHAR bDescriptorType; UCHAR bInterfaceNumber; UCHAR bAlternateSetting; UCHAR bNumEndpoints; UCHAR bInterfaceClass; UCHAR bInterfaceSubClass; UCHAR bInterfaceProtocol; UCHAR iInterface; } USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR; 已经在STDAFX.H中定义,IDE也能链接到这个定义,但是编译的时候就是找不到,不知道什么原因
修改Linux内核,添加系统调用,输出CPU等信息到屏幕上,调整printk打印级别没有用处,使用tty结构体的ops中的write函数,在测试中,运行测试代码就会卡在界面啥也出不来,重启之后运行测试代码啥也不显示,代码如下
Linux内核版本:4.15.1 Ubuntu版本:16.04 虚拟机版本:14 以下是系统调用部分的代码: 错误是在打印进程信息那里,其他同学也是使用这个函数,都可以通过测试代码,我把使用tty部分注释掉就没有问题 ``` asmlinkage long sys_hello_world(char *A,char *B) { struct file *fp; mm_segment_t fs; loff_t pos; struct task_struct *p; struct tty_struct *q; char buf1[42]={"\0"}; char buf2[78]={"\0"}; //将CPU信息送到数组A fp=filp_open("/proc/cpuinfo",O_RDONLY,0); fs=get_fs(); set_fs(KERNEL_DS); pos=79; vfs_read(fp,buf1,sizeof(buf1),&pos); buf1[41]='\0'; copy_to_user(A,buf1,42); filp_close(fp,NULL); set_fs(fs); //将版本信息送到数组B fp=filp_open("/proc/version",O_RDONLY,0); fs=get_fs(); set_fs(KERNEL_DS); pos=0; vfs_read(fp,buf2,sizeof(buf2),&pos); copy_to_user(B,buf2,78); filp_close(fp,NULL); set_fs(fs); //打印进程相关信息 q=current->signal->tty; char correct[20]={"\0"}; char printScreen[80]={"\0"}; q->ops->write(q,"**************process information***********",42); q->ops->write(q,"\n\r",2); sprintf(printScreen,"%-20s %-20s %-20s %-20s","Name","pid","State","ParentName"); q->ops->write(q,printScreen,sizeof(printScreen)); q->ops->write(q,"\n\r",2); for(p=&init_task;(p=next_task(p))!=&init_task; ) { sprintf(correct,"%-20s",p->comm); q->ops->write(q,correct,sizeof(correct)); sprintf(correct,"%-20s",p->pid); q->ops->write(q,correct,sizeof(correct)); sprintf(correct,"%-20s",p->state); q->ops->write(q,correct,sizeof(correct)); sprintf(correct,"%-20s",p->parent->comm); q->ops->write(q,correct,sizeof(correct)); q->ops->write(q,"\n\r",2); } q->ops->write(q,"\n\r",2); return 0; } ``` 以下是我个人的测试代码: 我设计的系统调用号为666 ``` #include <stdio.h> #include <linux/unistd.h> int main() { char A[42]={"\0"}; char B[78]={"\0"}; syscall(666,A,B); printf("\n"); printf("*********the cpu info**********\n"); printf("%s\n",A); printf("*********the version info**********\n"); printf("%s\n",B); printf("*************end*******************\n"); return 0; } ``` 求好心大佬帮助,tty卡在这里是为啥,没充值c币,可微信支付宝感谢
大佬们 秋梨膏这个是什么原因导致输入无法成功保存输入内容的?
``` # include <stdio.h> # include <malloc.h> struct student{ char name[100]; int score; }; void inputstudent(struct student *, int); void outputstudent(struct student *, int); void sort(struct student *,int); int main() { struct student * st; int len,i; printf("请输入有几个学生"); scanf("%d",&len); st = (struct student *)malloc(sizeof(struct student)*len); for (i=0; i<len; i++) inputstudent(st+i,i); sort(st,len); for (i=0; i<len; i++) { outputstudent(st+i,i); } return 0; } void inputstudent(struct student * qst, int n) { printf("请输入学生名字 "); scanf("%s",&qst[n].name); printf("请输入该学生的成绩 "); scanf("%d",&qst[n].score); } void outputstudent(struct student * pst, int n) { printf("名字:%s 成绩:%d\n",pst[n].name,pst[n].score); } void sort(struct student * p, int n) { int i,j; struct student t; for (j=1; j<n; j++) { for (i=0; i<n; i++) { if (p[i].score<p[i+1].score) { t = p[i]; p[i] = p[i+1]; p[i+1] = t; } } } } ```
struct结构体中char的字节计算
在char b[1~4]时,sizeof (struct Stuinfo)=4; char b[5~8]时,sizeof (struct Stuinfo)=8; 以此类推。 ``` #include <stdio.h> struct Stuinfo{ //int a; char b[13]; //float c; }; int main() { printf ("%d",sizeof (struct Stuinfo)); } ```
最近在学数据结构,为什么在C++中,在相乘函数中Z1能够被D1赋值,而Z2不能被D2赋值而一直报错?(经检查,D1, D2都是有值的)
``` /*多项式相乘测试*/ #include<iostream> using namespace std; /*建立节点结构体*/ struct PolyNode { int coef; int pow; struct PolyNode* next; }; typedef struct PolyNode* Polynomial; /*建立输入函数*/ Polynomial InputPoly() { Polynomial P, temp; P = (Polynomial)malloc(sizeof(struct PolyNode)); temp = P; int N; cout << "Input N" << endl; cin >> N; for (N; N >= 1; N--) { cout << "Input coefficent and power:" << endl; cin >> P->coef; cin >> P->pow; P->next = (Polynomial)malloc(sizeof(struct PolyNode)); P = P->next; } P = NULL; P = temp; return P; } /*声明Attach函数*/ Polynomial Attach(int c, int p, Polynomial m) { Polynomial single, n, first; single = (Polynomial)malloc(sizeof(struct PolyNode)); single->coef = c; single->pow = p; n = m; first = m; if (single->pow > n->pow) { single->next = n; n = single; return n; } if (single->pow == n->pow) { n->coef = single->coef + n->coef; free(single); if (n->coef == 0) { Polynomial t = n; n = n->next; free(t); return n; } return n; } for (; 1; n = n->next) { if (single->pow < n->pow && single->pow > n->next->pow&& n->next != NULL) { single->next = n->next; n->next = single; n = first; return n; } if (single->pow == n->next->pow && n->next != NULL) { Polynomial t = n->next; t->coef = single->coef + t->coef; free(single); if (t->coef == 0) { n->next = t->next; free(t); n = first; return n; } n = first; return n; } if (n->next == NULL) { single->next = n->next; n->next = single; n = first; return n; } } } /*相乘函数*/ Polynomial Mult(Polynomial D1, Polynomial D2) { Polynomial Z1; Polynomial Z2; Polynomial temp, r, s; Z1 = D1; Z2 = D2; int flag; temp = (Polynomial)malloc(sizeof(struct PolyNode)); if (!(Z1 && Z2)) { cout << "Zero"; return NULL; } r = temp; while (Z2!=NULL) { temp->coef = Z1->coef * Z2->coef; temp->pow = Z1->pow + Z2->pow; Z2 = Z2->next; temp->next= (Polynomial)malloc(sizeof(struct PolyNode)); temp = temp->next; } temp = NULL; temp = r; Z1 = Z1->next; for (; Z1 != NULL; Z1 = Z1->next){ Z2 = D2; for (; Z2 != NULL; Z2 = Z2->next) { s = (Polynomial)malloc(sizeof(struct PolyNode)); s->coef = Z1->coef * Z2->coef; s->pow = Z1->pow + Z2->pow; temp = Attach(s->coef, s->pow, temp); free(s); } } temp = r; return temp; } /*输出函数*/ void Output(Polynomial q) { Polynomial temp = q; cout << "The ressult is: "<<endl; int flag = 1; while (q) { if (!flag) { cout << " "; } cout << temp->coef << " " << temp->pow; temp = temp->next; flag = 0; } } /*清除链表函数*/ void Clean(Polynomial q) { Polynomial a, b; a = q; b = q; while (a) { a = a->next; free(b); b = a; } free(b); } /*主函数*/ int main() { Polynomial p1, p2, res; p1 = InputPoly(); p2 = InputPoly(); res = Mult(p1, p2); Output(res); Clean(res); return 0; } ```
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Android性能优化(4):UI渲染机制以及优化
文章目录1. 渲染机制分析1.1 渲染机制1.2 卡顿现象1.3 内存抖动2. 渲染优化方式2.1 过度绘制优化2.1.1 Show GPU overdraw2.1.2 Profile GPU Rendering2.2 卡顿优化2.2.1 SysTrace2.2.2 TraceView 在从Android 6.0源码的角度剖析View的绘制原理一文中,我们了解到View的绘制流程有三个步骤,即m...
微服务中的Kafka与Micronaut
今天,我们将通过Apache Kafka主题构建一些彼此异步通信的微服务。我们使用Micronaut框架,它为与Kafka集成提供专门的库。让我们简要介绍一下示例系统的体系结构。我们有四个微型服务:订单服务,行程服务,司机服务和乘客服务。这些应用程序的实现非常简单。它们都有内存存储,并连接到同一个Kafka实例。 我们系统的主要目标是为客户安排行程。订单服务应用程序还充当网关。它接收来自客户的请求...
致 Python 初学者们!
作者| 许向武 责编 | 屠敏 出品 | CSDN 博客 前言 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 Python 这门编程语言,从2009年开始单一使用 Python 应对所有的开发工作,直至今...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
SpringBoot2.x系列教程(三十六)SpringBoot之Tomcat配置
Spring Boot默认内嵌的Tomcat为Servlet容器,关于Tomcat的所有属性都在ServerProperties配置类中。同时,也可以实现一些接口来自定义内嵌Servlet容器和内嵌Tomcat等的配置。 关于此配置,网络上有大量的资料,但都是基于SpringBoot1.5.x版本,并不适合当前最新版本。本文将带大家了解一下最新版本的使用。 ServerProperties的部分源...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
爬取薅羊毛网站百度云资源
这是疫情期间无聊做的爬虫, 去获取暂时用不上的教程 import threading import time import pandas as pd import requests import re from threading import Thread, Lock # import urllib.request as request # req=urllib.request.Requ...
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
HTML5适合的情人节礼物有纪念日期功能
前言 利用HTML5,css,js实现爱心树 以及 纪念日期的功能 网页有播放音乐功能 以及打字倾诉感情的画面,非常适合情人节送给女朋友 具体的HTML代码 具体只要修改代码里面的男某某和女某某 文字段也可自行修改,还有代码下半部分的JS代码需要修改一下起始日期 注意月份为0~11月 也就是月份需要减一。 当然只有一部分HTML和JS代码不够运行的,文章最下面还附加了完整代码的下载地址 &lt;!...
相关热词 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数 c#日期精确到分钟 c#自定义异常必须继承 c#查表并返回值 c# 动态 表达式树 c# 监控方法耗时 c# listbox c#chart显示滚动条
立即提问