Linux C语言笔试试题(含详细答案)-1_第1页
Linux C语言笔试试题(含详细答案)-1_第2页
Linux C语言笔试试题(含详细答案)-1_第3页
Linux C语言笔试试题(含详细答案)-1_第4页
Linux C语言笔试试题(含详细答案)-1_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LinuxC语言笔试试题(含详细答案)适用场景:Linux后台开发、嵌入式LinuxC语言基础考核考试时长:90分钟满分:100分一、单项选择题(共15题,每题2分,共30分)1.Linux系统中,C语言程序编译后生成的可执行文件默认权限为?()A.755B.644C.777D.6002.下列关于C语言指针的说法,正确的是?()A.指针变量可以存储任意数据的值B.空指针是指向地址0的指针,可直接解引用C.指针变量的本质是存储内存地址的变量D.指针类型不影响内存取值的字节数3.Linux下gcc编译代码时,生成调试信息的参数是?()A.-O2B.-gC.-WallD.-std=c994.以下结构体大小,在32位Linux系统中是?()PlainText

structTest{

chara;

intb;

shortc;

};A.7B.8C.10D.125.Linux系统中,fork()函数返回值说法错误的是?()A.父进程返回子进程PIDB.子进程返回0C.调用失败返回-1D.子进程返回父进程PID6.C语言中volatile关键字的主要作用是?()A.变量只读不可修改B.禁止编译器优化,每次从内存读取数据C.定义全局变量D.提升变量运算速度7.下列不属于Linux进程状态的是?()A.运行态B.就绪态C.挂起态D.僵尸态8.关于static关键字,说法错误的是?()A.局部static变量生命周期贯穿整个程序B.全局static变量仅当前文件可见C.static函数可被其他文件调用D.static局部变量仅初始化一次9.Linux中dup2()函数的作用是?()A.创建新进程B.复制文件描述符C.打开文件D.关闭文件10.以下代码运行结果是?()PlainText

#include<stdio.h>

intmain(){

inta=10;

int*p=&a;

printf("%d",*p++);

return0;

}A.10B.11C.随机值D.报错11.管道(pipe)的默认特点是?()A.双向通信、无缓冲B.单向通信、半双工、有缓冲C.双向通信、全双工D.可跨进程、跨设备通信12.宏定义#defineDIV(a,b)a/b执行DIV(2+3,5)结果是?()A.1B.2.6C.2D.013.Linux下查看进程占用CPU、内存资源的命令是?()A.lsB.topC.pwdD.cat14.下列关于缓冲区的说法正确的是?()A.stderr默认行缓冲B.stdout默认全缓冲C.stderr默认无缓冲D.stdin默认无缓冲15.进程退出时,用于回收子进程资源的函数是?()A.exit()B.wait()C.fork()D.exec()二、填空题(共10空,每空2分,共20分)1.C语言中,________关键字用于声明常量变量,值不可被修改。2.Linux进程的三大核心段分别是代码段、________、________。3.指针数组和数组指针中,int*p[10]是________,int(*p)[10]是________。4.僵尸进程产生的核心原因是子进程退出后,________未调用函数回收子进程退出状态。5.Linux文件描述符中,标准输入、标准输出、标准错误的编号分别是________、________、________。6.防止头文件重复包含的两种常用方式是#ifndef宏防护和________。三、简答题(共4题,每题5分,共20分)1.简述栈内存和堆内存的区别(从分配方式、生命周期、大小、管理方式说明)。2.什么是野指针?野指针的危害及规避方法是什么?3.简述孤儿进程和僵尸进程的区别,以及各自的处理方式。4.简述gcc编译C程序的四个阶段及各阶段作用。四、编程题(共2题,每题15分,共30分)1.基础编程:编写C语言程序,实现字符串反转功能,不使用库函数strrev,兼容任意普通字符串,在Linux环境可正常编译运行。2.Linux进阶编程:利用fork()创建子进程,父子进程分别打印不同内容,父进程等待子进程执行完毕后再退出,避免产生僵尸进程。参考答案及详细解析一、单项选择题答案及解析1.答案:A解析:Linux下gcc编译生成的可执行文件,默认权限为755(所有者读写执行,组用户、其他用户读执行);普通文本文件默认权限为644。2.答案:C解析:指针是存储内存地址的变量;空指针禁止解引用,会触发段错误;指针类型决定取值的字节长度,如char*取1字节,int*取4字节。3.答案:B解析:-g生成gdb调试信息;-O2开启二级代码优化;-Wall开启所有警告;-std指定C语言标准。4.答案:D解析:32位Linux系统默认4字节对齐。chara占1字节,补3字节对齐;intb占4字节;shortc占2字节,补2字节对齐,总大小12字节。5.答案:D解析:fork()调用成功,父进程返回子进程PID,子进程返回0;调用失败返回-1,子进程不会返回父进程PID。6.答案:B解析:volatile强制变量每次从内存读取,禁止编译器缓存优化,多用于硬件寄存器、多线程共享变量。const关键字表示变量只读。7.答案:C解析:Linux进程核心状态包含运行、就绪、阻塞、僵尸、终止,无挂起态(挂起是Windows进程状态)。8.答案:C解析:static修饰的函数为内部函数,仅当前源文件可调用,外部文件无法引用。9.答案:B解析:dup2(oldfd,newfd)用于复制文件描述符,将newfd指向oldfd对应的文件,常用于重定向标准输入输出。10.答案:A解析:后置++先取值后自增,*p++等价于*(p++),先取出p指向的值10,再让p指针后移,输出结果为10。11.答案:B解析:匿名管道pipe是半双工单向通信,内核提供固定大小缓冲区,仅支持有亲缘关系的进程通信。12.答案:C解析:宏是纯文本替换,DIV(2+3,5)替换为2+3/5,根据运算优先级,先算除法3/5=0,最终结果为2。13.答案:B解析:top命令实时查看系统进程CPU、内存占用;ls查看文件、pwd查看当前路径、cat读取文件内容。14.答案:C解析:stderr标准错误默认无缓冲,报错信息立即输出;stdout标准输出默认行缓冲,遇到换行符刷新缓冲区。15.答案:B解析:wait()/waitpid()用于父进程回收子进程资源,解决僵尸进程问题;exit()是进程退出函数。二、填空题答案及解析1.const2.数据段、栈段(顺序可互换,部分教材包含bss段,也可填写)3.指针数组、数组指针解析:p先和[]结合为数组,存放指针即为指针数组;p先和*结合为指针,指向数组即为数组指针。4.父进程5.0、1、26.#pragmaonce三、简答题详细答案1.栈内存和堆内存的区别(1)分配方式:栈由系统自动分配释放,堆由程序员手动通过malloc/free申请和释放;(2)生命周期:栈内存随函数调用创建,函数结束立即释放;堆内存生命周期贯穿程序全程,主动释放才会回收;(3)内存大小:栈空间固定且较小,默认几MB;堆空间极大,可使用系统大部分空闲内存;(4)管理方式:栈自动管理,无需手动干预;堆手动管理,忘记释放会造成内存泄漏。2.野指针的定义、危害及规避方法野指针:指向未知、非法、已释放内存地址的指针,无有效指向对象。危害:解引用野指针会触发段错误、程序崩溃,或篡改未知内存数据,造成隐性bug,难以排查。规避方法:指针定义时初始化为NULL;指针使用前判空;内存释放后立即将指针置空;杜绝返回局部变量地址。3.孤儿进程和僵尸进程区别及处理方式(1)僵尸进程:子进程先退出,父进程未调用wait回收子进程资源,子进程保留进程信息,占用系统进程号资源。处理:父进程主动调用wait/waitpid回收,或父进程退出,由init进程统一回收。(2)孤儿进程:父进程先退出,子进程未退出,子进程被init进程收养。孤儿进程无危害,资源可正常回收,无需手动处理,系统自动管理。4.gcc编译C程序的四个阶段(1)预处理:处理宏定义、头文件、条件编译,删除注释,生成.i预处理文件;(2)编译:将预处理后的代码翻译成汇编代码,语法检查优化,生成.s汇编文件;(3)汇编:将汇编代码转换为机器码,生成.o二进制目标文件;(4)链接:将多个目标文件、系统库文件整合,解析符号引用,生成可执行文件。四、编程题完整代码+解析1.字符串反转程序PlainText

#include<stdio.h>

//字符串反转函数

voidstr_reverse(char*str)

{

if(str==NULL)

{

return;

}

//计算字符串长度

intlen=0;

while(str[len]!='\0')

{

len++;

}

//首尾交换字符

inti,j;

chartemp;

for(i=0,j=len-1;i<j;i++,j--)

{

temp=str[i];

str[i]=str[j];

str[j]=temp;

}

}

intmain()

{

charbuf[100]="LinuxCTest";

printf("反转前:%s\n",buf);

str_reverse(buf);

printf("反转后:%s\n",buf);

return0;

}编译运行:gcctest1.c-otest1&&./test1核心思路:手动遍历计算字符串长度,通过首尾双指针交换字符,不依赖系统库函数,兼容性强。2.Linuxfork进程编程(无僵尸进程)PlainText

#include<stdio.h>

#include<unistd.h>

#include<sys/wait.h>

intmain()

{

pid_tpid=fork();

if(pid<0)

{

perror("forkerror");

return-1;

}

elseif(pid==0)

{

//子进程执行逻辑

printf("子进程:PID=%d,父进程PID=%d\n",getpid(),getppid());

sleep(2);//模拟子进程业务执行

printf("子进程执行完毕,即将退出\n");

}

else

{

//父进程执行逻辑

printf("父进程:PID=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论