为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 100
学习任务

weixin_慕九州3042664 的学生作业:

代码如下: #include #include #include #include #include #include #include #include #define PATH "." #define MAGIC 0xDEAD #define SHM_SIZE 1024 static char buf[SHM_SIZE]; int main(int argc, char *argv[]) { if(argc != 3) { fprintf(stderr, "Usage: transmit \n"); exit(EXIT_FAILURE); } key_t key = ftok(PATH, MAGIC); if(key == -1) { perror("ftok()"); exit(EXIT_FAILURE); } int shmid = shmget(key, SHM_SIZE, IPC_CREAT | 0666); if(shmid == -1) { perror("shmget()"); exit(EXIT_FAILURE); } int pid = fork(); if(pid == -1) { perror("fork()"); exit(EXIT_FAILURE); } else if(pid == 0) { char *addr = shmat(shmid, NULL, 0); if(addr == (void*)-1) { perror("shmat()"); exit(EXIT_FAILURE); } FILE *fp = fopen(argv[1], "rb"); if(NULL == fp) { fprintf(stderr, "fopen() error"); exit(EXIT_FAILURE); } fseek(fp, 0, SEEK_END); int file_size = ftell(fp); if(file_size == 0) { fprintf(stderr, "file size is zero, impossible for handling"); exit(EXIT_FAILURE); } printf("read % bytes to buf\n", file_size); memcpy(buf, &file_size, sizeof(file_size)); fseek(fp, 0, SEEK_SET); fread(buf + sizeof(file_size), 1, file_size, fp); fclose(fp); memcpy(addr, buf, file_size + sizeof(file_size)); exit(0); } else { wait(NULL); char *addr = shmat(shmid, NULL, 0); if(addr == (void*)-1) { perror("shmat()"); exit(EXIT_FAILURE); } FILE *fp = fopen(argv[2], "wb"); if(NULL == fp) { fprintf(stderr, "fopen() error"); exit(EXIT_FAILURE); } int file_size = *((int *)addr); printf("file size is %d\n", file_size); memcpy(buf, addr + 4, file_size); fwrite(buf, 1, file_size, fp); fclose(fp); } int ret = shmctl(shmid, IPC_RMID, NULL); if(ret == -1) { perror("shmctl()"); exit(EXIT_FAILURE); } return 0; }

得分 100
学习任务

学无止境呀呀呀 的学生作业:

#!/bin/bash # 批处理文件创建脚本 # 功能:根据参数创建指定数量的文件 # 检查参数个数 if [ $# -eq 0 ] || [ $# -gt 2 ]; then echo "错误: 参数个数不正确!" echo "用法: $0 [文件个数]" echo "示例: $0 log 3 # 创建 log_1.txt, log_2.txt, log_3.txt" echo "示例: $0 data # 创建 data_1.txt 到 data_5.txt(默认5个)" exit 1 fi # 获取文件名参数 filename="$1" # 根据参数个数设置文件数量 if [ $# -eq 2 ]; then # 两个参数:使用第二个参数作为文件数量 count="$2" # 验证文件数量是否为有效数字 if ! [[ "$count" =~ ^[1-9][0-9]*$ ]]; then echo "错误: 文件个数必须是正整数" exit 1 fi else # 一个参数:使用默认数量5 count=5 fi echo "正在创建 $count 个文件..." echo "文件名格式: ${filename}_X.txt" # 使用循环创建文件 for i in $(seq 1 $count); do # 生成文件名 new_file="${filename}_${i}.txt" # 创建空文件 touch "$new_file" # 显示创建信息 echo "已创建: $new_file" done echo "完成! 共创建了 $count 个文件。" #!/bin/bash # 目录统计脚本 # 功能:统计指定目录下的普通文件和目录文件数量(不包含隐藏文件) # 检查参数个数 if [ $# -ne 1 ]; then echo "错误: 参数个数不正确!" echo "用法: $0 " echo "示例: $0 /home/user/documents" exit 1 fi # 获取目录参数 directory="$1" # 判断参数是否为目录 if [ ! -d "$directory" ]; then echo "错误: '$directory' 不是一个有效的目录!" exit 1 fi # 检查目录是否可读 if [ ! -r "$directory" ]; then echo "错误: 没有权限读取目录 '$directory'!" exit 1 fi echo "正在统计目录: $directory" echo "----------------------------------------" # 初始化计数器 file_count=0 dir_count=0 # 使用循环遍历目录中的所有项(不包含隐藏文件) for item in "$directory"/*; do # 检查是否存在匹配(当目录为空时,通配符会返回自身) if [ "$item" = "$directory/*" ]; then break fi # 统计普通文件 if [ -f "$item" ]; then ((file_count++)) # 统计目录文件 elif [ -d "$item" ]; then ((dir_count++)) fi done # 显示统计结果 echo "统计结果:" echo "普通文件数量: $file_count" echo "目录文件数量: $dir_count" echo "总计: $((file_count + dir_count)) 个非隐藏项" echo "----------------------------------------" # 可选:显示详细信息 read -p "是否显示详细信息?(y/n): " show_details case $show_details in [Yy]|[Yy][Ee][Ss]) echo "" echo "普通文件列表:" find "$directory" -maxdepth 1 -type f -not -name ".*" -printf "%f\n" | sort echo "" echo "目录文件列表:" find "$directory" -maxdepth 1 -type d -not -name ".*" -printf "%f\n" | grep -v "^\.$" | sort ;; *) echo "统计完成。" ;; esac

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号