linux和IO常见面试题

张开发
2026/4/13 17:06:10 15 分钟阅读

分享文章

linux和IO常见面试题
1、文件、网络、压缩、链接的指令文件ls、cp、mv、rm、touch、cat、chmod网络ifconfig、ping、netstat、ss、curl、wget压缩tar、gzip、gunzip、zip、unzip链接ln硬链接、ln -s符号链接2、GDB调试流程编译时加 -ggcc -g program.c -o program启动GDBgdb program设置断点break main 或 break 行号运行程序run单步执行step进入函数或 next不进入查看变量print 变量名继续执行continue退出GDBquit3、环境变量相关概念与配置方法概念环境变量是操作系统中存储系统或用户配置信息的命名值对影响进程行为。常用环境变量PATH、HOME、LD_LIBRARY_PATH、SHELL配置方法临时export 变量名值永久写入 ~/.bashrc 或 /etc/profile然后执行 source ~/.bashrc4、常见Makefile的符号功能与语法目标依赖文件按下Tab键后写命令常用符号与函数$表示当前目标名$表示第一个依赖文件$^表示所有依赖文件递归展开赋值:简单展开赋值?条件赋值追加赋值wildcard通配符匹配文件patsubst模式字符串替换放在命令前面表示执行时不回显该命令即不打印命令本身。%模式匹配符用于定义通用规则例如 %.o: %.c 表示所有.o文件依赖对应的.c文件。5、标准库和系统调用区别标准库函数如 printf、fopen是用户态封装可移植、带缓冲调用系统调用实现具体功能系统调用如 write、open是内核提供的接口无缓冲、直接操作硬件可移植性差但开销更大。标准库在用户层系统调用是进入内核的唯一入口。6、文件操作API有哪些标准库fopen、fclose、fread、fwrite、fprintf、fscanf、fgets、fputs系统调用open、close、read、write、lseek、stat、dup、fcntl7、静态库和动态库区别及应用静态库在编译时合并到可执行文件运行时无依赖、体积大、更新需重编译动态库在运行时加载多程序共享、体积小、更新方便但依赖库存在。静态库适合独立部署、库不常变的场景动态库适合多程序共享、频繁更新的场景。8、什么是标准IO与文件I/O标准IO是C标准库提供的文件操作接口如fopen、fprintf、fgets在用户层维护缓冲区减少系统调用次数具有可移植性通常操作FILE结构体。文件I/O也叫系统调用IO是操作系统直接提供的接口如open、read、write无用户层缓冲操作文件描述符属于内核态调用可移植性差但效率可控。9、创建文件的函数创建文件常用open系统调用int open(const char *pathname, int flags, mode_t mode);flags常用O_CREAT | O_RDWRmode指定权限如0666。标准IO的fopen也可创建文件FILE *fopen(const char *path, w);标准I/O创建文件的权限用文件I/O创建如何编写标准I/Ofopen(file.txt, w)权限由umask决定。文件I/O系统调用创建文件需指定权限int fd open(file.txt, O_CREAT | O_WRONLY | O_TRUNC, 0644);其中0644表示所有者读写、组和其他只读。10、缓冲区缓冲区是一块内存区域用于暂存数据目的是减少实际IO操作次数如读写磁盘或调用系统调用从而提高效率。标准IO提供行缓冲、全缓冲、无缓冲三种策略文件IO通常在内核也有页缓存。标准I/O的缓存机制和刷新条件有哪些缓存机制全缓冲填满缓冲区才刷新默认普通文件、行缓冲遇到换行符或填满刷新默认终端、无缓冲立即刷新如stderr。刷新条件缓冲区满、遇到换行符仅行缓冲、调用fflush、程序正常退出return或exit、文件关闭fclose。11、Linux下/etc路径保存什么内容/etc目录保存系统的配置文件和管理工具所需的配置文件基本都是文本文件。常见内容有passwd用户账户信息、shadow用户密码、group用户组、fstab文件系统挂载、hostname主机名、hosts域名解析、network/网络配置、apt/或yum.repos.d/软件源、profile与bashrc环境变量配置等。12、硬链接与软连接的区别硬链接与源文件共享同一个inode删除源文件不影响硬链接不能跨文件系统不能链接目录。软连接符号链接是一个独立文件存储指向源文件的路径删除源文件则软连接失效可以跨文件系统可以链接目录13、选择任意一种I/O实现文件的拷贝使用标准I/O#include stdio.h int main() { FILE *src fopen(source.txt, rb); FILE *dst fopen(dest.txt, wb); if (!src || !dst) return 1; char buffer[4096]; size_t n; while ((n fread(buffer, 1, sizeof(buffer), src)) 0) { fwrite(buffer, 1, n, dst); } fclose(src); fclose(dst); return 0; }使用文件I/O系统调用#include fcntl.h #include unistd.h int main() { int src open(source.txt, O_RDONLY); int dst open(dest.txt, O_CREAT | O_WRONLY | O_TRUNC, 0644); if (src -1 || dst -1) return 1; char buffer[4096]; ssize_t n; while ((n read(src, buffer, sizeof(buffer))) 0) { write(dst, buffer, n); } close(src); close(dst); return 0; }

更多文章