Linux试题

Linux期末考试模拟题

一、选择题

  1. 将当前目录下的test文件移动到父目录中,正确的命令是

    在这里插入图片描述

  2. 查看Linux系统中正在运行的进程信息,应该使用( ps )命令。

  3. 终止当前正在运行的程序可以使用( ctrl+c )快捷键。

  4. SOCKET网络通信中不会在SERVER端调用的函数是( D )。

​ A. bind B. listen C. accept D. connect

  1. Linux中使用( socket() )函数创建SOCKET对象。
  2. 已知变量定义如下: FILE *fp; 以下语句正确的是( B )。

A. fread(fp, “test”); B. fprintf(fp, “test”);

C. fclose(fp, “test”); D. fwrite(fp, “test”);

  1. Linux中将字符串“192.168.1.1”转换成IP地址类型数据的函数是( inet_addr )。

二、简答题

  1. 简述SOCKET编程中bind、listen和accept函数的作用

    bind函数: 用于将套接字与指定端口相连.本函数适用于未连接的数据报或流类套接口,在connect()或listen()调用前使用。当用socket()创建套接口后,它便存在于一个名字空间(地址族)中,但并未赋名。bind()函数通过给一个未命名套接口分配一个本地名字来为套接口建立本地捆绑(主机地址/端口号)。

    Listen 函数: listen函数可使得流套接字sockfd处于监听状态,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程。在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接。

    Accept 函数: 它从内核中取出已经建立的客户连接,然后把这个已经建立的连接返回给用户程序,此时用户程序就可以与自己的客户进行点到点的通信了。

  2. 对比说明Linux编程中多进程和多线程的特点

    随便找的,答案待定

    进程是分配系统资源基本实体,线程是CPU调度的基本单位"

    1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
    2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
    两者都可以提高程序的并发度,提高程序运行效率和响应时间。
    线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
    根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:
    1。速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。
    2。资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。
    3。同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内

  3. 简要说明函数fgets、fputs、fread和fwrite各自参数、返回值的类型和作用

    char * fgets(char *s, int n, FILE *stream);

    参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。

    流中读取n-1(n默认1024)个字符之前,如遇到了换行符或EOF

    int fputs(char *string, FILE *stream);

    送一个字符串到一个流中。

    fread(buffer,size,count,fp);

    buff表示存放输入数据的首地址,

    size 表示数据块的字节数。

    count 表示要读写的数据块块数。

    fp 表示文件指针

    fwrite(buffer,size,count,fp);

    buff表示存放输入数据的首地址

    size 表示数据块的字节数。

    count 表示要读写的数据块块数。

    fp 表示文件指针

  4. 简要介绍Linux多线程pthread库中互斥量(mutex)的使用方式

    Linux中提供一把互斥锁mutex

    每个线程在对资源操作前都尝试先加锁,成功加锁才能操作,操作结束解锁。

    但通过“锁”就将资源的访问变成互斥操作,而后与时间有关的错误也不会再产生了

    pthread_mutex_init()函数 功能:初始化一个互斥锁

    pthread_mutex_destroy()函数 功能:销毁一个互斥锁

    pthread_mutex_lock()函数 功能:加锁

    pthread_mutex_trylock()函数 功能:尝试加锁

    pthread_mutex_unlock()函数 功能:解锁

三、程序设计题

  1. 使用C语言编写程序实现:将文本文件/var/message复制到/home/test/message,并在每行文本前加上行号。
#include<stdio.h>
int main(){
    FILE *fpIn;
    FILE *fpOut;
    char str[120];
    int row;
    fpIn = fopen("/var/message","r");
    fpOut = fopen("/home/test/message","w");
    fgets(str,81,fpIn);
    while (!feof(fpIn))
    {
        fprintf(fpOut,"%04d %s\n",row,str);
        row++;
        fgets(str,81,fpIn);
    }
    fclose(fpIn);
    fclose(fpOut);
}

2.使用多进程编程完成以下功能:

(1)定义长度为10的整型数组全局变量;

(2)主函数创建子线程;

(3)主函数中每隔1秒将产生一个随机数,依次放入数组中,共执行10次;

(4)子线程中,每隔2秒从数组中依次取出一个数显示,共显示10个数字。

(5)使用互斥量(mutex)保证对全局数据的互斥操作

(6)主函数等待子线程结束后退出。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
pthread_mutex_t mutex;
int r[10];
void *child_proc()
{	int i;
	for (i = 0; i < 10; i++)
	{
		pthread_mutex_lock(&mutex);
		printf("%d子:%d\n",i, r[i]);
		pthread_mutex_unlock(&mutex);
		sleep(2);
	}
	return NULL;
}
int main()
{
	int i;
	pthread_t tid;
	pthread_mutex_init(&mutex,NULL);
	pthread_create(&tid, NULL, &child_proc,NULL);
	for (i = 0; i < 10; i++)
	{
		int a = rand();
		pthread_mutex_lock(&mutex);
		r[i] = a;
		printf("主:%d\n",a);
		pthread_mutex_unlock(&mutex);
		sleep(1);
	}
	pthread_join(tid, NULL);
	pthread_mutex_destroy(&mutex);
	return 0;
}

3.socket编程(预测,不一定考)

client端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <unistd.h> 
#include <arpa/inet.h>
int main() {
    int cfp;
    struct sockaddr_in saddr;
    int sin_size,ret;
    cfp=socket(AF_INET,SOCK_STREAM,0);
    if (cfp==-1)
    {
        printf("socket error");
        return -1;
    }
    bzero(&saddr,sizeof(saddr));
    saddr.sin_family=AF_INET;
    saddr.sin_addr.s_addr =inet_addr("127.0.0.1");
    saddr.sin_port=htons(0x5555);
    ret =connect(cfp, (struct sockaddr *)&saddr,sizeof(struct sockaddr));
    if(ret == -1){
        printf("connect error");
        close(cfp);
        return -1;
    }
    send(cfp,"Hello I am client",sizeof("Hello I am client"),0);
    close(cfp);
    return 0;
}

server端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <unistd.h>
#include <pthread.h>
void *child_proc(void *arg){
        int nfp=(int *)arg;
        char buf[256];
        int ret;
        while(1){
            bzero(buf,sizeof(buf));
            ret=recv(nfp,buf,sizeof(buf),0);  
            if(ret== -1){
                printf("recv error\n");
                break;
            }
            printf("recv :%s\n",buf);
            if(strcmp(buf,"over")==0){
                printf("client close");
                break;
            }
        }
        close(nfp);
        return NULL;
}
int main()
{
    int sfp, nfp;
    int ret;
    int sin_size;
    
    pthread_t tid;
    struct sockaddr_in saddr, caddr;
    printf("server start..");
    sfp = socket(AF_INET, SOCK_STREAM, 0);
    if (sfp == -1)
    {
        printf("error");
        return -1;
    }
    bzero(&saddr, sizeof(saddr));
    saddr.sin_family = AF_INET;
    saddr.sin_addr.s_addr = htonl(INADDR_ANY);
    saddr.sin_port = htons(0x5555);
    ret = bind(sfp, (struct sockaddr *)&saddr, sizeof(struct sockaddr));
    if (ret == -1)
    {
        printf("bind error\n");
        close(sfp);
        return -1;
    }
    ret = listen(sfp, 5);
    if (ret == -1)
    {
        printf("listen error\n");
        close(sfp);
        return -1;
    }
    while (1)
    {
        printf("wait connect...\n");
        sin_size = sizeof(struct sockaddr_in);
        nfp = accept(sfp, (struct sockaddr *)&caddr, &sin_size);
        pthread_create(&tid,NULL,&child_proc,(void*)nfp);

    }
    
    return 0;
}

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
linux操作系统 一、单项选择题 1. 关于Linux内核版本的说法,以下错误的是()。 A.表示为主版本号.次版本号.修正号 B.1.2.3表示稳定的发行版 C.1.3.3表示稳定的发行版 D.2.2.5表示对内核2.2的第5次修正 2. 系统引导的过程一般包括如下几步: a.MBR的引导装载程序启动; b.用户登录; c.Linux内核运行; d.BIOS自检。 正确的顺序是()。 A.d,b,c,a B.d,a,c,b C.b,d,c,a D.a,d,c,b 3. 字符界面下使用shutdown命令重启计算机时所用的参数是()。 A.-h B.-t C.-k D.-r 4. 下面哪个不是桌面环境软件? A.KDE B.twm C. Gnome D.CDE 5. 在UNIX/Linux系统添加新用户的命令是() A. groupadd B. usermod C. userdel D. useradd 6. Android系统是基于Linux操作系统开发的手机系统,因此在进行刷机、删除系统自带软件时需要获得管理员账户( )的权限。 A.administrator B.admin C.root D.liveuser 7.已知当前系统umask的值为022,请问这时新建目录文件的权限为()。 A. 755 B. 644 C.775 D.664 8.已知用户sarwar在虚拟终端1和虚拟终端2及图形用户界面下登录,请问sarwar在虚拟终端1执行ls >tty2后,命令输出到哪里?() A.虚拟终端1 B.虚拟终端2 C.图形终端 D.无输出 二、填空题(每空1分,共15分) 1. Linux系统有三种基本的文件类型:普通文件、目录文件和 设备文件 。 2. 在超级用户下显示Linux系统正在运行的全部进程,应使用的命令及参数是 ps -aux 。 3. 将前一个命令的标准输出作为后一个命令的标准输入,称之为 管道 。 4. /sbin 目录用来存放系统管理员使用的管理程序。 5. 安装Linux系统对硬盘分区时,必须有两种分区类型: 文件系统分区 和 交换分区 。 11.将/home/stud1/wang目录做归档压缩,压缩后生成wang.tar.gz文件,并将此文件保存到/home目录下,实现此任务的tar命令格式__ __tar -czvf wang.tar.gz /home/stud1/wang_ 三、判断题(每题1分,共10分) 1. Ubuntu LINUX安装时自动创建了根用户。( T ) 2. LINUX的超级用户为root,登陆时不需要口令。( F ) 3. Linux不可以与MS-DOS、OS/2、Windows等其他操作系统共存于同一台机器上。( F ) 4. Linux的特点之一是它是一种开放、免费的操作系统。 ( T ) 5. RedHat系统,默认情况下根口令没有字符长短的的限制,但是必须把口令输入两次;如果两次输入的口令不一样,安装程序将会提示用户重新输入口令。 ( F ) 四、问答题\应用操作题(每题5分,共25分) 1. Linux内核主要由哪几部分组成?每部分的作用? Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。 进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时, 由调度程序选择最值得运行的进程; 内存管理(MM)允许多个进程安全的共享主内存区域; 虚拟文件系统(VirtualFileSystem,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统; 网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持; 进程间通讯(IPC) 支持进程间各种通信机制。 2. vi编辑器有哪几种工作模式?如何在这几种工作模式之间转换? Vi的工作模式有三种:命令模式、输入模式、末行模式。 在命令模式下输入a、A、i、I、o、O等命令之一可以进入输入模式, 在输入模式下按Esc键回到命令模式; 在命令模式下输入:进入末行模式,末行命令执行完后回到命令模式。 3.假设你是系统管理员,需要增加一个新的用户账号u1,为新用户设置初始密码,锁定用户账号u2,并删除用户账号u3。请写出完成本题所述功能的命令序列 useradd u1 -添加用户u1 passwd 123456 -为用户添加密码123456 passwd -l u2 -锁定用户账号u2 userdel u3 -删除用户账号u3 4.写出将/abc目录所有文件及目录打包压缩成文件abc.tar.gz的命令。 tar -zcvf abc.tar.gz /bc 5.创建一个用户,用户名为user02,所属私有组和标准组为group01,用户主目录为/home/user02,用户登录shell为/bin/bash。 useradd -g group01 –G group01 –d /home/user02 -s /bin/bash user02 五、综合题(1题10分,1题10分,共20分) 1、已知管理员用户的主目录结构如图2所示: (1)管理员用户目前在/R/B/T4/S0,分别写出执行以下命令后,管理员在目录系统的位置。 cd /R cd .. /R/B/T4 cd ../.. /R/B cd / / cd ~ /R (2)写出删除目录C的两种办法。 1.rm -rf /root/C 2.rm /root/T3 rm /root/T4 rmdik/root/C (3)已知管理员用户在/R目录,分别用绝对路径和相对路径方式写出将目录/R/C/T3/S0的文件复制到/R/D/T5目录的方法。 cp /R/C/T3/S0 /R/D/T5 cp /C/T3/S0 /D/T5 2、设计一个shell程序计算n的阶乘。要求: (1) 从命令行接收参数n; (2) 在程序开始后立即判断n的合法性,即是否有参数,若有是否为正整数,若非法请给错误提示; (3) 最后输出计算的结果。 #!/bin/sh echo “please input your number n:” read n #if(( ! -n “$n”)); then if test -z “$”; then echo “n is no data !” exit 1 else if(( $n<=));then echo -e “$n is no zhengzhengshu.\n”; exit 1 fi fi fact=1;tmp=1 while[$tmp -le $n ] do fact=$((fact*tmp));tmp=$((++tmp)); done echo "fact=$fact"

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值