问题简介:ubuntu18.04文件和设置打不开。
为什么有这个文章:1:就想sqlite3按方向键可以显示以前命令而不显示乱码。
2:百度搜到的方法:在装sqlite3之前先:apt install libreadline-dev
3:确实可以但是用没多久ubuntu图形界面的文件和设置打不开。尝试过重装系统,各种骚操作,均失败。对于强迫症患者难以接受。
简述解决问题过程。
第一个问题sqlite3方向键可以调出历史命令,已经装过sqlite3再去装libreadline-dev肯定想先卸载sqlite3,但是卸载完后运行sqlite3还是能用。后来搜到一个命令:apt -purge remove sqlite3
具体没试过,
第二个问题:最头疼的问题用了几天发现虚拟机桌面图标的文件和设置打不开。
然后就网上搜,发现很惊人的事实,搜到的答案就跟学习通老师发布讨论题,后面的答案一样,能找到不一样的基本没有。我想表达的是百度好多解决问题的答案有导向意义但参考意义不大。
搜到的答案基本全是ps nautilus ,然后kill 对应pid。最后对这答案都免疫了,(插句题外话,解决问题的过程其实是一个了解新知识的过程,而且更难忘。)最后我试了一下在终端输入nautilus命令出现了如下:
根据这个描述,我大概能确定就是sqlite3惹的祸。
然后就在百度上搜这个问题的描述,结果唯一唯一唯一找到和我同样问题的是一个很正规的网站,(又想吐槽百度…)www.askubuntu.com
那个提问者的描述大概是,他试着卸载清除重装nautilus,sqlite3,gnome但是都没成功。(和我太像了)
下面解决问题的答案我第一眼看过去就是一个重装sqlite3的命令就没注意,后来实在打不开文件设置很头疼就又去搜结果又回到了这个网站。。。由于是英文的我静下心来慢慢看发现是装其他版本的sqlite3
我就下载了最新版安装包。
先说一下傻瓜式安装步骤:
1:tar xvzf …
2:./confogure
3:make
4:make install
我后来重装一个新系统里面的工具基本都没有,例如gcc什么的所以这次在make 的时候遇到问题比如libtool,autoconf等工具没有导致make失败,(老师给的是配置好的ubuntu,就比如vim可以鼠标定位,gcc,openssh-server等必要的工具都装好了,感觉我宛如巨婴……)这些问题也不是很大装完新版本后运行nautilus发现可以打开文件,桌面化图标也可以打开!!!
两个班60个人一样的18.04,一样的sqlite3版本,竟然就只有我有这个问题。
好在问题解决舒服了很多。
最后插写题外话:
linuxc编程小白。
最近来研究内存和文件编程。
1:内存和变量存储位置
促使我好好研究内存的原因:为啥突然冒出一个malloc,申请来的动态内存有什么用,怎么用,为什么free(p),那我int a;怎么就不free(&a)呢,在各种找资源后大概了解了,(也不算了解,更加深入了点吧,毕竟以前老师也讲过这个话题,自己不懂怪谁)以下是我写的测试代码:
#include<stdio.h>
int c = 0;
int add(int a,int b)
{
printf("形参地址:%x %x\n",&a,&b);
printf("函数名地址:%x\n",&add);
return a+b;
}
int main()
{
static int aa = 0;
static int bb = 0;
static int cc;
static int dd;
int a = 1 ;
int b = 2;
int *p = &a;
int *pp = &b;
int *ppp = (int *)malloc(sizeof(int) * 100);
char *str = "hello";
char str1[] = "hi";
printf("初始化静态局部变量地址:%x %x\n",&aa,&bb);//初始化静态局部变量地址
printf("未初始化静态局部变量地址:%x %x\n",&cc,&dd);//未初始化静态局部变量地址
printf("局部变量地址,指针地址:%x %x %x %x\n",p,pp,&p,&pp);//局部变量地址,指针地址
printf("全局变量地址:%x\n",&c);//全局变量地址
printf("&ppp and ppp:%x %x\n",&ppp,ppp);//指向动态分配内存的指针地址(栈中),指针值(指向堆)
printf("&str and str文字常量区:%x %x\n",&str,str);
printf("&str1 and str1:%x %x\n",&str1,str1);
add(1,2);
return 0;
}
2:结构体内存对齐
其实上课也讲了,但是有些没讲明白,自己有研究了一下
自己设计代码各种测试,总结一些结论:
1:单一结构体
1总的规则按最长的数据类型来算,数组不算,基本上就是指针了64位占8字节
2 字符,字符串紧跟在前面那个类型后面
3struct
{
char;
short;
int;
int *
}假设int指针为8字节
struct
{
char;
short;
char;
}
struct{
char;
char;
short;
}
那这些结构体存储格式如下
2:结构体嵌套
总的规则:把结构体展开看最长的数据类型
1:不管小的套大的,还是大的套小的,结构体都要另外起一行存。老规矩看图,自认为比较经典的例子(至少对我自己有用)
3:有个问题拿出来讨论
都写过学生信息管理系统吧,默认写过
题目:假如我程序编好了功能正常运行,我创建了一串链表,并且增删改查一顿乱操作,最后保存到文件中去。此时,在文件中的链表的next是不是存了这一次malloc在堆上申请的空间的地址,
那下一次我加载文件这些next地址是不是没用了?
自己理解:每运行一次出现并且保存文件退出,这些next指针地址内容都要变。
最后进程,线程,socket冲冲冲!