gcc与动态库:
1、编写一个c程序,依次进行预编译,编译,汇编,链接,得到.i文件,.s文件,.o文件,和可执行文件
2、编写一个做两个数乘法功能的函数multi,返回值为输入的两个数的乘积,然后将其编译为动态库,静态库,并使用静态库和动态库,编写main.c,调用函数multi,得到可执行的二进制。
gdb、makefile、目录操作:
3、编写一个程序,通过gdb调试,使用到gdb的b,n,s,info,bt,p等命令,该题目通过截图提交
4、编写一个程序,执行会产生段错误,然后产生core,定位段错误在哪一行,该题目通过截图提交
5、编写两个.c文件,其中一个文件调用的函数在另外一个.c文件,编写Makefile,能够编译得到二进制并执行,Makefile内需使用到变量,自动变量,隐式规则,函数,伪目标,从而使Makefile具有最佳的通用性
6、编写一个程序,传递一个路径,能够打印对应路径下所有文件的文件名(不打印.和..两个文件名)
目录遍历:
7、传入一个绝对路径或者相对路径,能够遍历该路径下所有文件并打印(深度遍历)
ls -l实现及Linux文件读写:
8、传递任意一个目录路径,能够显示该目录的ls -l的效果
9、通过open接口打开并创建一个文件,往文件中写入一个字符串hello,关闭文件。然后再次打开该文件,读取内容并打印
文件操作、管道通信、mmap:
10、定义一个学生结构体类型struct student,里边含有学号,姓名,分数,定义结构体数组struct student s[3],给数组赋初值后,写入文件,然后通过lseek偏移到开头,然后再读取进行打印输出
11、通过mkfifo命令新建两个管道文件1.fifo,2.fifo,然后两个进程通过管道文件实现即时聊天效果
12、新建一个文件,里边内容为hello,通过mmap映射该文件后,修改hello为world,然后解除映射
进程创建-控制-退出
13、编写程序,打印当前进程pid,父进程pid,真实用户ID,真实组ID,有效用户ID,有效组ID
14、通过fork创建子进程,能够得到孤儿进程;通过fork创建进程,能够产生僵尸进程;通过fork创建子进程,然后父进程通过wait回收,同时拿到子进程的返回值
15、创建一个守护进程,守护进程每隔5秒钟,向/tmp下的一个名字为log的文件内写入“I have run 5s",就是5秒钟写一次。
管道、共享内存:
16、创建一个无名管道,fork子进程,然后子进程向管道写端写Hello,父进程接收数据并打印
17、新建共享内存,连接,然后往共享内存写入How are you,然后另外一个进程连接共享内存,读取数据并打印显示
信号量、信号:
18、A,B两个进程通过管道通信,像以前的互相聊天一样,然后A进程每次接收到的数据通过A1进程显示(一个新进程,用于显示A接收到的信息),A和A1间的数据传递采用共享内存,对应的有一个B1进程,用于显示B进程接收到的信息。针对A,B进程,退出时采用ctrl+c退出,当收到对应信号后,自身进程能够通过信号处理函数进行资源清理,清理后exit退出进程。(A1,B1,手动关闭即可)。
线程创建、资源回收、加解锁:
19、创建一个子线程,传入数值1,在子线程中能够获取并打印,子线程退出,返回数值2,主线程通过pthread_join获取等待子线程结束并获取子线程的退出值
20、创建一个子线程,子线程申请内存,通过清理函数进行free,子线程停留在read标准输入,主线程cancel子线程,子线程能够通过清理函数free对应的malloc的内存
21、子线程,主线程,同时对一个全局变量加2千万,通过加锁,实现最终效果是4千万。
条件等待、网络字节数传输:
22、子线程等待在一个条件变量上,主线程发送signal,使条件成立,然后子线程唤醒得到执行,正常结束,然后主线程回收子线程
23、将一个端口号2000,转换为网络字节序并以16进制打印输出,将一个IP地址192.168.1.10转换为网络字节序并以16进制打印输出
socket编程:
24、通过TCP协议+select实现即时聊天。
epoll多路复用:
25、通过epoll的边沿触发模式实现即时聊天。
描述符传递:
26、将父进程打开的一个文件描述符传递给子进程,子进程能够通过对应的文件描述符进行文件读写
进程池:
27、实现进程池
线程池:
28、实现线程池