《操作系统》 实验1_unix——io参考

2023-10-31

任务1

在当前用户目录下创建数据文件student.txt,文件的内部信息存储格式为Sname:S#:Sdept:Sage:Ssex,即“姓名:学号:学院:年龄:性别”,每行一条记录,输入不少于10条学生记录,其中包括学生本人记录。编写程序task41.c,从文件中查找Sdept字段值为“计算机与网络安全学院”的文本行,输出到文件csStudent.txt中,保存时各字段顺序调整为S#:Sname:Sage: Ssex:Sdept。
提示:从终端读入一个文本行到字符串 char buf[MAXSIZE]可调用函数可调用函数:
“fgets(buf, MAXSIZE, stdin);”,其中stdin是表示键盘输入设备的文件指针。

源代码
#include<stdio.h>
#include<string.h>

#define SEARCH_EDU "" //待查学院
#define FILE_NAME "./student.txt" //打开文件名
#define FILE_OUT "./csStudent.txt" //输出文件名
#define MAXSIZE 1024

typedef struct STUDENT
{
    char name[20];//姓名
    char sno[20];//学号
    char edu[50];//学院
    char age[4];//年龄
    char sex[4];//性别
}Student;

int main()
{
    Student students;
    FILE* stuFile = fopen(FILE_NAME,"r"); 
    FILE* outFILE = fopen(FILE_OUT,"w");
    int i,j;
    char buf[MAXSIZE];
    //读取文件学生信息到内存
    while(!feof(stuFile))
    {
        fgets(buf,MAXSIZE,stuFile);
        sscanf(buf, "%[^:]:%[^:]:%[^:]:%[^:]:%[^\n]\n", students.name,
        students.sno,students.edu,students.age,students.sex);     
    	//输出指定学院的学生到文件
        if(strcmp(students.edu,SEARCH_EDU) == 0)
        {
            fprintf(outFILE,"%s:%s:%s:%s:%s\n", students.sno,
            students.name,students.age,students.sex,students.edu);
        }
    }
    fclose(stuFile);
    fclose(outFILE);
    return 0;

}

编译过程

在这里插入图片描述

测试数据

在这里插入图片描述

运行结果

在这里插入图片描述

解决问题
feof() 函数

发现运行最后多出了一行
查找了feof函数:

注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。

feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。

ASCI C提供一个feof函数,用来判断文件是否结束。

“C”语言的“feof()”函数和数据库中“eof()”函数的运作是完全不同的。数据库中“eof()”函数读取当前指针的位置,“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。 多年来把“位置和内容”相混,从而造成了对这一概念的似是而非。

那么,位置和内容到底有何不同呢?举个简单的例子,比如有人说“你走到火车的最后一节车箱”这就是位置。而如果说“请你一直向后走,摸到铁轨结束”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP)){…}”进行文件复制时,目标文档总会比源文档“多出一些”的原因。

在“C”文件读取操作时不能完全依赖于“while(!feof(FP)){…}”的判断。下面代码是改进后的代码,该代码执行后output文件内容和input文件内容一致,与使用“while(!feof(FP)){…}”相比,output文件的结尾符号(EOF)没有被读入到input文件中。

feof()可以用EOF代替吗?不可以。fgetc返回-1时,有两种情况:读到文件结尾或是读取错误。因此我们无法确信文件已经结束, 因为可能是读取错误! 这时我们需要feof()。

#include<stdio.h>
#include<string.h>

#define SEARCH_EDU "计算机与网络安全学院" //待查学院
#define FILE_NAME "./student.txt" //打开文件名
#define FILE_OUT "./csStudent.txt" //输出文件名
#define MAXSIZE 1024

typedef struct STUDENT
{
    char name[20];//姓名
    char sno[20];//学号
    char edu[50];//学院
    char age[4];//年龄
    char sex[4];//性别
}Student;

int main()
{
    Student students;
    FILE* stuFile = fopen(FILE_NAME,"r"); 
    FILE* outFILE = fopen(FILE_OUT,"w");
    int i,j;
    char buf[MAXSIZE];
    //读取文件学生信息到内存
    //更改函数
    fgets(buf,MAXSIZE,stuFile);
    while(!feof(stuFile))
    {
        sscanf(buf, "%[^:]:%[^:]:%[^:]:%[^:]:%[^\n]\n", students.name,
        students.sno,students.edu,students.age,students.sex);     
    	//输出指定学院的学生到文件
        if(strcmp(students.edu,SEARCH_EDU) == 0)
        {
            fprintf(outFILE,"%s:%s:%s:%s:%s\n", students.sno,
            students.name,students.age,students.sex,students.edu);
        }
        fgets(buf,MAXSIZE,stuFile);
    }
    fclose(stuFile);
    fclose(outFILE);
    return 0;
}

结果:
在这里插入图片描述

百度feof函数

fputs() 、fgets()函数

fputs() 函数也是用来显示字符串的,它的原型是:

1 #include <stdio.h>
2 int fputs(const char*s,FILE *stream);c

s代表要输出的字符串的首地址,可以是字符数组名或字符指针变量名。

stream 表示向何种流中输出,可以是标准输出流 stdout,也可以是文件流。标准输出流即屏幕输出,printf 其实也是向标准输出流中输出的。

fputs() 和 puts() 有两个小区别:
  1. puts() 只能向标准输出流输出,而 fputs() 可以向任何流输出。
  2. 使用 puts() 时,系统会在自动在其后添加换行符;而使用 fputs() 时,系统不会自动添加换行符。

那么这是不是意味着使用 fputs() 时就要在后面添加一句“printf("\n");”换行呢?看情况!如果输入时使用的是 gets(),那么就要添加 printf 换行;但如果输入时用的是 fgets(),则不需要。

使用 fgets() 时,换行符会被 fgets() 读出来并存储在字符数组的最后,这样当这个字符数组被输出时换行符就会被输出并自动换行。

但是也有例外,比如使用fgets()时指定了读取的长度,如只读取 5 个字符,事实上它只能存储 4 个字符,因为最后还要留一个空间给 ‘\0’,而你却从键盘输入了多于 4 个字符,那么此时“敲”回车后换行符就不会被 fgets() 存储。数据都没有地方存放,哪有地方存放换行符呢!此时因为 fgets() 没有存储换行符,所以就不会换行了。

任务2

调用Unix I/O库函数,编写程序task42.c,从键盘读入5个学生的成绩信息,包括学号、姓名、语文、数学、英语,成绩允许有一位小数,存入一个结构体数组,结构体定义为:

typedef struct _subject {
	char sno[20];	   //学号
	char name[20];   //姓名
	float chinese;	   //语文成绩
	float math;		//数学成绩
	float english;	   //英语成绩
}  subject;

将学生信息,逐条记录写入数据文件data,最后读回第1、3、5条学生成绩记录,显示出来,检查读出结果是否正确。

源代码
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>

#define SIZE 5

typedef struct _subject
{
    char sno[20];//学号
    char name[20];//姓名
    float chinese;//语文成绩
    float math;//数学成绩
    float english;//英语成绩
}subject;

int main()
{
    subject subs[SIZE]; 
    subject sub;
    int fd;
    int i;
    printf("请输入五位学生的信息:\n");
    printf("分别输入学号、姓名 、语文成绩、数学成绩、英语成绩:\n");
    fd = open("data.txt",O_WRONLY|O_CREAT|O_TRUNC,0777);
    for(i = 0; i < SIZE; i++)
    {  
    	scanf("%s%s%f%f%f",subs[i].sno,subs[i].name,&subs[i].chinese,&subs[i].math, &subs[i].english);
        write(fd,(void*)&subs[i],sizeof(subject));
    }

    close(fd);

    fd = open("data.txt",O_RDONLY,0);
    for(i = 0; i < SIZE; i++)
    {
        read(fd,(void*)&sub,sizeof(subject));
        if(i % 2 == 0)
            printf("%s  %s  %.1f  %.1f  %.1f\n",sub.sno,sub.name,sub.chinese,
            sub.math,sub.english);
    }
    
    close(fd);
}

编译过程

在这里插入图片描述

测试数据

运行结果

在这里插入图片描述

解决问题
任意类型数据文件的读写

read、write函数在内存和文件之间传输一个数据块内容,这个数据块在 内存中的地址为buf,在文件中位置为pos。这个数据块位于内存中时,其内容可以是任何类 型,如整型、浮点型、字符串、数组、结构体、联合体,因此,UNIX I/O可以实现任意类 型数据的文件读写功能。

在本题中读入的数据为结构体,,而不是字符串,因此文件data不是文 本文件,用cat、more等命令查看其内容时,显示结果可能是乱码。

任务3

在Linux环境下,可以调用库函数gettimeofday测量一个代码段的执行时间,请写一个程序task43.c,测量read、write、fread、fwrite函数调用所需的执行时间,并与prof/gprof工具测的结果进行对比,看是否基本一致。并对四个函数的运行时间进行对比分析。
提示:由于一次函数调用时间太短,测量误差太多,应测量上述函数多次(如10000次)运行的时间,结果才会准确。

源代码
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdlib.h>
#include<sys/time.h>
double caltime(struct timeval time_start, struct timeval time_end) {
    double wa= time_end.tv_usec - time_start.tv_usec;
    double sa= time_end.tv_sec - time_start.tv_sec;
    double ms = wa / 1000000.0 + sa;
    return ms;
}
void myread(int fd1, char buf) {
    read(fd1,&buf,1);
}
void mywriter(int fd1, char buf) {
    write(fd1,&buf,1);
}
void myfread(FILE *fp, char buf) {
    fread(&buf, 1, 1, fp);
}
void myfwriter(FILE *fp, char buf) {
    fwrite(&buf, 1, 1, fp);
}
int main()
{
    int fd1;//文件标识符
    FILE *fp;//文件指针
    char buf;//缓冲区
    struct timeval time_start;//开始测试时间
    struct timeval time_end;//结束测试时间
    //测试输入:read系
    fd1 = open("test.txt",O_RDONLY);
    fp = fopen("file.txt", "r");
    //测试read()
    gettimeofday(&time_start,NULL);
    for(int i; i < 100000000; i++)
    	myread(fd1,buf);
    gettimeofday(&time_end,NULL);
    
    printf("read() %lfs\n",caltime(time_start, time_end));
    //测试fread()
    gettimeofday(&time_start,NULL);
    
    for(int i; i < 100000000; i++)
    	myfread(fp,buf);
    	
    gettimeofday(&time_end,NULL);
    
    printf("fread() %lfs\n",caltime(time_start, time_end));
    close(fd1);
    fclose(fp);
    //测试输出:write系
    fd1 = open("test.txt",O_WRONLY,0777);
    fp = fopen("file.txt", "w");
    //测试write()
    gettimeofday(&time_start,NULL);
    for(int i; i < 100000000; i++)
    	mywriter(fd1,buf);
    gettimeofday(&time_end,NULL);
    
    printf("write() %lfs\n",caltime(time_start, time_end));
    //测试fwrite()
    gettimeofday(&time_start,NULL);
         
    for(int i; i < 100000000; i++)
    	myfwriter(fp,buf);
    gettimeofday(&time_end,NULL);
    
    printf("fwrite() %lfs\n",caltime(time_start, time_end));
    close(fd1);
    fclose(fp);
}

编译过程

在这里插入图片描述

运行结果

在这里插入图片描述
在这里插入图片描述

解决问题
使用prof/gprof测量程序运行时间

Linux/Unix环境提供了prof/gprof工具来收集一个程序各函数的执行次数和占用CPU时间等统计信息,使用prof/gprof工具查找程序性能问题,要求编译命令添加-p选项(prof)或-pg选项(gprof),程序执行时就会产生执行跟踪文件mon.out(或gmon.out),再运行prof(或gprof)程序读取跟踪数据,产生运行报告。现在用gprof对以下程序各函数运行性能(占用CPU时间)进行测量。

先输入源代码

#include <stdio.h>
int fast_multiply(x,  y) 
{ 
    return x * y; 
} 
int slow_multiply(x, y) 
{ 
    int i, j, z; 
    for (i = 0, z = 0; i < x; i++) 
        z = z + y; 
    return z; 
} 
int main(int argc, char *argv[]) 
{ 
    int i,j; 
    int x,y; 
    for (i = 0; i < 2000; i ++) { 
        for (j = 0; j <  3000 ; j++) { 
            x = fast_multiply(i, j); 
            y = slow_multiply(i, j); 
        } 
    } 
    printf("x=%d, y=%d\n", x, y); 
    return 0; 
}

然后编译和执行该程序,检查是否函数性能跟踪数据文件gmon.out:
编译

$ gcc  -pg  -o  multiply multiply.c 

运行

$ ./multiply 
x=5995001, y=5995001

查看文件

$ ls gmon.out 
gmon.out

最后,用gprof命令产看各函数执行时间:

$ gprof multiply gmon.out 
Flat profile:
Each sample counts as 0.01 seconds.
  %    cumulative  self                 self     total           
 time   seconds    seconds   calls    us/call    us/call  name    
 99.44    14.11    14.11     6000000     2.35    2.35    slow_multiply
 0.42     14.17    0.06                                 main
 0.14     14.19    0.02      6000000      0.00    0.00   fast_multiply

在这里,slow_multipy和fast_multiply执行600000次所花运行时间为14.11s和0.02秒。

任务4

在Linux系统环境下,编写程序task44.c,对一篇英文文章文件的英文单词词频进行统计。
(1) 以“单词:次数”格式输出所有单词的词频(必做)
(2) 以“单词:次数”格式、按词典序输出各单词的词频(选做)
(3) 以“单词:次数”格式输出出现频度最高的10个单词的词频
例如,若某个输入文件内容为:
GNU is an operating system that is free software—that is, it respects users’ freedom.
The development of GNU made it possible to use a computer without software that would trample your freedom.
则输出应该是:
GNU:2
is:3
it:2
……
提示:可以调用字符串处理函数、二叉树处理函数等库函数

源代码
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
#include<malloc.h>
#include<string.h>
//#include<algorithm>
//#include <unistd.h>
#define MAXSIZE 200
typedef struct Word {
	char word[30];		 //设单词最长为30个字母
	int count;			//该单词出现的次数
}WordNode;
typedef struct article {
	WordNode Word[MAXSIZE]; //单词的集合
	int num;			//这篇文章不同的英文单词的种数
}Article;
void Insert_word(char* temp, Article* a) {
	if (a->num == MAXSIZE) {
		printf("单词表已经满,输入失败\n");
		return;
	}
	if (temp == NULL)
		return;
	if (a->num == 0) {		//情况1:单词表里暂时还没有保存单词
		a->Word[0].word[0] = '\0';
		strcpy(a->Word[0].word, temp);
		a->Word[0].count = 1;
		a->num = 1;
	}
	else {
		int i;
		for (i = 0; i < a->num; i++) {
			if (strcmp(temp, a->Word[i].word) == 0) {//情况2:该单词已经存在
				a->Word[i].count++;
				return;
			}
		}
		a->Word[a->num].word[0] = '\0';
		strcpy(a->Word[a->num].word, temp);			//情况2:该单词是首次输入
		a->Word[a->num].count = 1;
		a->num++;
	}
}
void divide_word(char* temp) {
	int i;
	if (temp == NULL) {
		return;
	}

	for (i = 0; temp[i] != '\0'; i++) {
		if (!((temp[i] >= 'A' && temp[i] <= 'Z') || (temp[i] >= 'a' && temp[i] <= 'z'))) {

			temp[i] = ' ';
		}

	}
}

//按照高频前十输出
void paixu(Article* article) {
	int i, j;
	for (i = 0; i < article->num - 1; i++) {
		for (j = 0; j < article->num - 1 - i; j++) {
			if (article->Word[j].count < article->Word[j + 1].count) {
				WordNode temp = article->Word[j];
				article->Word[j] = article->Word[j + 1];
				article->Word[j + 1] = temp;
			}
		}
	}
}
//void sort(Article* article) {
//	int i, j;
//	for (i = 0; i < article->num - 1; i++) {
//		for (j = 0; j < article->num - 1 - i; j++) {
//			if (strcmp(article->Word[j].word , article->Word[j + 1].word) > 0) {
//				WordNode temp = article->Word[j];
//				article->Word[j] = article->Word[j + 1];
//				article->Word[j + 1] = temp;
//			}
//		}
//	}
//}
//字典排序,快速排序
void swap(Article* article,int i,int j) {
   WordNode temp = article->Word[i];
   article->Word[i] = article->Word[j];
   article->Word[j] = temp;
}
void quick_sort_recursive(Article* article,int start, int end) {
   if(start >= end) return ;
   int mid = end;
   int left = start, right = end - 1;
   while(left < right) {
   	while(strcmp(article->Word[left].word,article->Word[mid].word) < 0 && left < right)
   	    left++;
   	    
   	while(strcmp(article->Word[right].word,article->Word[mid].word) >= 0 && left < right)
   	    right--;
   	swap(article, left, right);
   }
   if(strcmp(article->Word[left].word,article->Word[end].word) > 0) {
   	swap(article, left, end);
   }
   else 
        left++;
   if(left) {
   	quick_sort_recursive(article, start, left - 1);
   }
   quick_sort_recursive(article, left + 1, end);
}
void quick_sort(Article* article) {
   quick_sort_recursive(article, 0, article->num - 1);
}


void main()
{
	Article article = {.num=0};
	char temp[1000];
	int i;
	FILE* fd = fopen("./test44.txt", "r");
	while (!feof(fd)) {
		char* p;
		fscanf(fd, "%s", temp);
		divide_word(temp);		//有可能一次读入不止一个单词,所以要分隔开

		p = strtok(temp, " ");	//strtok把temp分成多个字符串
		do {
			Insert_word(p, &article);
		} while ((p = strtok(NULL, " ")) != NULL);//合适调整循环跳出条件

	}
	quick_sort(&article);
	printf("按词典序输出,所有单词的词频如下:\n");
	for (i = 0; i < article.num; i++) {
		printf("%s:%d\n", article.Word[i].word, article.Word[i].count);
	}
	printf("\n最高词频的前十个单词:\n");
	paixu(&article);			//使用稳定排序法,才能符合题目要求
	for (i = 0; i < 10; i++) {
		printf("%s:%d\n", article.Word[i].word, article.Word[i].count);
	}

}
编译过程

在这里插入图片描述

测试数据

![在这里插入图片描述](https://img-blog.csdnimg.cn/2266347834804b10a42cee47f9e0cdfb.png

运行结果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《操作系统》 实验1_unix——io参考 的相关文章

  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • 操作错误:尝试在 ubuntu 服务器中写入只读数据库

    我正在使用 FlaskApp 运行mod wsgi and apache2在 Ubuntu 服务器上 我尝试运行烧瓶应用程序localhost成功 然后部署到ubuntu服务器上 但是当我尝试更新数据库时 出现错误 Failed to up
  • Composer 安装要求

    我正在尝试将 Composer 安装到 Laravel 项目中 当我做的时候sudo composer install在项目目录中它显示了两个错误 Problem 1 Installation request for simplesoftw
  • Linux 桌面快捷方式和安装图标

    我需要添加什么到我的 spec文件来创建桌面快捷方式并在安装过程中为快捷方式分配一个图标 rpm 如果需要脚本 一个示例将非常有帮助 您在 Linux 下使用 desktop 文件作为图标 图标放置的位置取决于您使用的发行版和桌面环境 由于
  • Linux shell 脚本中的 while 循环超时

    这工作正常 无限循环 while TRUE do printf done 我在尝试着timeout this while loop与timeout命令 所有这些都不起作用 timeout 5 while TRUE do printf don
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • 在主目录中安装库

    在 Linux Ubuntu 中 我尝试运行一个工具 但它显示错误 库丢失 我无权在系统中安装任何内容 或者根本无法从我的用户帐户执行 sudo 是否可以在我的主目录 没有 sudo 中安装缺少的库 在我的例子中为 libstdc so 6
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • 我需要启用哪些权限才能使 Docker 卷正常工作?

    假设我有一个保存一些数据的 Docker 容器 我希望这些数据能够持续存在 如果容器被停止 删除 升级等 我仍然希望数据位于主机操作系统文件系统上的可访问位置 目前 我的解决方案是创建一个目录 srv service name在我的主机上
  • 如何在不反编译的情况下更改已编译的.class文件?

    我想更改 class 文件方法 我安装 JD Eclipse Decompiler 并打开 class 文件 我添加了一些代码并保存 class 文件 但是 class 文件没有改变 我不知道如何使用反编译器 如果可能的话 如何在不使用反编
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • 带有 CUDA 的 Tensorflow:导入错误

    我已经按照 NVIDIA 教程中的说明一步步安装了 TensorFlow Ubuntu 16 04 桌面版 GTX 970 http www nvidia com object gpu accelerated applications te
  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C

随机推荐

  • elasticsearch批量修改,批量更新某个字段

    1 源生API 在这里没有用官方提供的bulk API 而是用的另外一种方式 POST infomations infomations update by query JSON请求格式 query match status UP SHELF
  • Android项目实战系列—基于博学谷(七)课程模块(上)

    由于这个模块内容较多 分为上 中 下 三篇博客分别来讲述 请耐心阅读 课程模块分为四个部分 课程列表 课程详情 视频播放 播放记录 课程模块 上 主要讲述课程列表部分 一 水平滑动广告栏界面 1 创建水平滑动广告栏界面 在res layou
  • 友情链接检查工具

    友链检测工具 它是一款 完全免费 的软件 用以检测友情链接没有掉链 与网页版对比 具有 多线程检测 实时检测 速度快 高效 操作 步骤 输入网址 点击查询按钮 等待完成返回查询结果 友链检测工具 zip
  • python简单的学习方式04

    python学习 一 嵌套循坏 二 break和continue关键字 三 for else和while else 四 列表的性质 五 列表的增删查改 1 增加 2 修改 3 删除 一 嵌套循坏 引入模块 作用 直接借用别人实现好的功能来解
  • 实例化和初始化的区别

    实例化一般是由类创建的对象 在构造一个实例的时候需要在内存中开辟空间 即 Student s new Student 初始化 实例化的基础上 并且对 对象中的值进行赋一下初始值
  • 面试题--Git与设计模式

    面试题 Git与设计模式 Git 1 Git和SVN有什么区别 2 什么是Git 3 在 Git 中提交的命令是什么 4 什么是 Git 中的 裸存储库 5 Git 是用什么语言编写的 6 在Git中 你如何还原已经 push 并公开的提交
  • WSL启动Ubuntu时报错“参考的对象类型不支持尝试的操作”

    最近要用到微软的WSL了 打开以后发现hyper v之前因为用virtual box虚拟机给关了 导致报错 打开相关的虚拟化功能以后 又遇到了新的问题 参考的对象类型不支持尝试的操作 电脑系统 WIN11 我会给大家介绍三种方法 打游戏的朋
  • 队列的使用注意点

    队列通常使用链表或数组作为元素的基础存储 队列的大小需要约束 如果允许内存中的队列不受限制 那么对于许多类别的问题 它可以不受限制地增长 直到它达到灾难性失败的地步 因为它耗尽了内存 这发生在生产者超过消费者的时候 无界队列在系统中可能很有
  • leecode26题删除排序数组中的重复项

    双指针法的介绍 下面内容转载自代码随想录 点击进入代码随想录 双指针法 快慢指针法 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作 定义快慢指针 快指针 寻找新数组的元素 新数组就是不含有目标元素的数组 慢指针 指向更新
  • 华为OD机试 - 计算误码率(Java)

    题目描述 误码率是最常用的数据通信传输质量指标 它可以理解为 在多少位数据中出现一位差错 移动通信网络中的误码率主要是指比特误码率 其计算公式如下 比特误码率 错误比特数 传输总比特数 为了简单 我们使用字符串来标识通信的信息 一个字符错误
  • 解决libtorch安装编译链接时出错

    cmake build config Release Scanning dependencies of target example app 50 Building CXX object CMakeFiles example app dir
  • SQL注入漏洞(postgresql注入)

    以前孤陋寡闻对postgresql这个数据库少有了解 后来与几个目前在企业实习的朋友聊天才得知他们有的公司项目用的是postgresql 有的公司是正在将原本的数据库迁移到postgresql 可见postgresql比较热 毕竟免费且功能
  • idea:idea自定义注释模板自动生成方法注释

    idea的类注释 可以通过自己添加模板的方式来生成 在Live Templates里 添加一个分组MyGroup 下面添加一组数据 如下图 Abbreviation为 Expand with选择tab 我个人喜换用tab 主要是跟系统的回车
  • uni-app使用scroll-view实现锚点定位和滚动监听功能

    1 html代码
  • ubuntu实现有线连接拨号上网(本文使用版本ubuntu18.04 )

    1 第一步 cd usr share applications 找到下面的应用 上图中的 NetworkConnections 双击打开 如果没有的话 命令运行 sudo apt install net tools 之后就有了 2 选择以太
  • maven本地仓库jar注册

    mvn install install file Dfile name 包名称 jar DgroupId groupId DartifactId artifactId Dversion version Dpackaging jar 例
  • 《网络建设与运维》大赛试题解析

    网络建设与运维 大赛试题解析资源 CSDN文库 https download csdn net download weixin 41687096 87799021
  • Spring 中AspectJ框架简介说明

    转自 Spring 中AspectJ框架简介说明 在以前的章节中 我们学习了使用代理类实现AOP Spring 2 0 以后 Spring 新增了对 AspectJ 的支持 所以笔者建议大家在Spring 框架中 尽量使用AspectJ方式
  • 2.4总线操作和定时

    文章目录 一 引子 二 介绍 1 总线周期 2 总线定时规范 三 同步定时方式 1 过程 2 特点 3 优缺点 优点 缺点 四 异步定时方式 1 介绍 2 三种方式 1 不互锁方式 2 半互锁方式 3 全互锁方式 3 优缺点 优点 缺点 五
  • 《操作系统》 实验1_unix——io参考

    任务1 在当前用户目录下创建数据文件student txt 文件的内部信息存储格式为Sname S Sdept Sage Ssex 即 姓名 学号 学院 年龄 性别 每行一条记录 输入不少于10条学生记录 其中包括学生本人记录 编写程序ta