
作业社区
探索学习新天地,共享知识资源!
weixin_慕哥3021856 的学生作业:
sem.h #ifndef __SEM_H_ #define __SEM_H_ #include #include #include #include #include #include #include #include #define SEM_PATHNAME "." #define SEM_PROJ_ID 100 union semun { unsigned short *array;// SETALL }; extern int sem_create(int nsems, unsigned short values[]); extern int sem_p(int semid, int semnum); // 占用资源 extern int sem_v(int semid, int semnum); // 释放资源 extern int sem_del(int semid); // 删除信号量集 #endif main.c #include #include "semop.h" #define SEM_CONTROL_P 0 // 控制父进程的信号量编号 #define SEM_CONTROL_C 1 // 控制子进程的信号量编号 int main(void) { int semid; pid_t cpid; FILE *fp = NULL; time_t cur_time; struct tm *time_info; unsigned short values[2] = {1, 0}; char filepath[] = "./datetime.txt"; char buffer[32] = {0}; semid = sem_create(2, values); if (semid == -1) { perror("sem create failed!\n"); return -1; } fp = fopen(filepath, "w"); if (fp == NULL) { perror("open failed!\n"); exit(-1); } fputs("\n", fp); fclose(fp); cpid = fork(); if (cpid == -1) { perror("[ERROR] fork()"); exit(EXIT_FAILURE); } else if (cpid == 0) { for (int n = 0; n < 10; n++) { cur_time = time(NULL); time_info = localtime(&cur_time); strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", time_info); sem_p(semid, SEM_CONTROL_C); fp = fopen(filepath, "a"); if (fp == NULL) { perror("open failed!\n"); exit(-1); } fputs(buffer, fp); fclose(fp); printf("Child process write successfully!\n"); sem_v(semid, SEM_CONTROL_P); } } else { for (int n = 1;n < 11; n++) { sem_p(semid, SEM_CONTROL_P); fp = fopen(filepath, "a"); if (fp == NULL) { perror("open failed!\n"); exit(-1); } fprintf(fp, "%d,\n"); sem_v(semid, SEM_CONTROL_P); fclose(fp); printf("Parent process write successfully!\n"); sleep(1); } } wait(NULL); sem_del(semid); return 0; } 【图片】





wgf1209 的学生作业:
//标准的命名空间 using namespace std; template class SeqList { private: T *data; // 顺序表存储数据的数组 int maxSize; // 顺序表的最大容量 int length; // 顺序表的当前长度 public: // 构造函数,初始化顺序表 SeqList(int size = 10) : maxSize(size), length(0) { data = new T[maxSize]; } // 析构函数,释放动态分配的内存 ~SeqList() { delete[] data; } // 插入元素到指定位置 void insert(int index, const T &elem) { if (index < 0 || index > length) { throw out_of_range("Index out of range"); } if (length >= maxSize) { throw overflow_error("SeqList is full"); } for (int i = length; i > index; --i) { data[i] = data[i - 1]; } data[index] = elem; ++length; } // 删除指定位置的元素 void remove(int index) { if (index < 0 || index >= length) { throw out_of_range("Index out of range"); } for (int i = index; i < length - 1; ++i) { data[i] = data[i + 1]; } --length; } // 获取指定位置的元素 T &get(int index) { if (index < 0 || index >= length) { throw out_of_range("Index out of range"); } return data[index]; } // 获取顺序表的当前长度 int size() const { return length; } // 遍历顺序表并打印元素 void traverse() const { for (int i = 0; i < length; ++i) { cout




