第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

作業(yè)社區(qū)

探索學習新天地,共享知識資源!

0 提交作業(yè)
0 布置作業(yè)
0 滿分作業(yè)
得分 100
學習任務(wù)

胡漢三66 的學生作業(yè):

#include #include #include #include #include #include #include int main() { // 1.打開相機, 獲取文件描述符 int fd = open("/dev/video0",O_RDWR); // 2.獲取攝像頭屬性值, 利用標準IO函數(shù)ioctl() 獲取攝像頭屬性結(jié)構(gòu)體 struct v4l2_capability cap = {0}; // 存儲設(shè)備信息的結(jié)構(gòu)體 v4l2_capability ioctl(fd, VIDIOC_QUERYCAP, &cap); // 3.打印結(jié)構(gòu)體成員, 也就是設(shè)備功能屬性值: printf("cap.driver = %s \n",cap.driver); printf("cap.card = %s \n",cap.card); printf("cap.bus_info = %s \n",cap.bus_info); printf("cap.version = %d \n",cap.version); printf("cap.capabilities = %x \n",cap.capabilities); printf("cap.drivece caps = %x \n",cap.device_caps); //printf("cap.reserved = %x \n",cap.reserved); // 4.獲取 并 循環(huán)打印 相機所有的 像素格式 和 對應(yīng)描述 struct v4l2_fmtdesc fmt; //存儲幀描述信息的結(jié)構(gòu)體. fmt.index = 0; fmt.type = V4L2_CAP_VIDEO_CAPTURE; // 循環(huán)打印相機所有的 像素格式 和 對應(yīng)描述 while(0 == ioctl(fd, VIDIOC_ENUM_FMT, &fmt)){ printf("pixel format:%c%c%c%c, description:%s\n", fmt.pixelformat & 0xFF, (fmt.pixelformat >> 8) &0xFF, (fmt.pixelformat >> 16) &0xFF,(fmt.pixelformat >> 24) &0xFF, fmt.description); ++fmt.index; // ++索引 } }

得分 100
學習任務(wù)

浪潮君 的學生作業(yè):

#include // 標準輸入輸出 #include // 提供 exit() 等函數(shù) #include // 提供 memset() #include // 提供 open() 和 O_NONBLOCK #include // epoll 相關(guān)函數(shù)和結(jié)構(gòu)體 #include // mkfifo() 創(chuàng)建 FIFO #include // read()、close() 等 #define MAXEVENTS 10 // epoll_wait 返回事件的最大數(shù)量 #define FIFO_PATH "/tmp/myfifo"// 有名管道路徑 int main(void) { int epfd, ret, fifo_fd; // epoll 實例、返回值、FIFO 文件描述符 struct epoll_event ev; // 注冊到 epoll 的事件 struct epoll_event ret_ev[MAXEVENTS]; // epoll_wait 返回的事件數(shù)組 char buffer[256] = {0}; // 讀緩沖區(qū) // 創(chuàng)建有名管道(如果已經(jīng)存在會報錯,可忽略) if (mkfifo(FIFO_PATH, 0666) == -1) { perror("[INFO] mkfifo (可忽略 if already exists)"); } // 打開 FIFO 文件為非阻塞讀模式(注意:沒有寫端時 read 會返回 0) fifo_fd = open(FIFO_PATH, O_RDONLY | O_NONBLOCK); if (fifo_fd == -1) { perror("[ERROR] 打開 FIFO 失敗"); exit(EXIT_FAILURE); } // 創(chuàng)建 epoll 實例,返回 epoll 文件描述符 epfd = epoll_create(1); if (epfd == -1) { perror("[ERROR] 創(chuàng)建 epoll 實例失敗"); exit(EXIT_FAILURE); } // 配置監(jiān)聽事件:監(jiān)聽 FIFO 的“可讀”事件 ev.data.fd = fifo_fd; // 要監(jiān)聽的文件描述符 ev.events = EPOLLIN; // 表示監(jiān)聽“可讀事件” ret = epoll_ctl(epfd, EPOLL_CTL_ADD, fifo_fd, &ev); // 注冊到 epoll if (ret == -1) { perror("[ERROR] 注冊 epoll 事件失敗"); exit(EXIT_FAILURE); } printf("開始監(jiān)聽 FIFO:%s\n", FIFO_PATH); // 主事件循環(huán)(永久監(jiān)聽) while (1) { // 阻塞等待事件發(fā)生,超時時間為 1000 毫秒 ret = epoll_wait(epfd, ret_ev, MAXEVENTS, 1000); if (ret == -1) { perror("[ERROR] 等待事件失敗"); exit(EXIT_FAILURE); } else if (ret == 0) { // 超時無事件發(fā)生 printf("無數(shù)據(jù),等待中...\n"); } else { // 有一個或多個事件發(fā)生 for (int i = 0; i < ret; ++i) { if (ret_ev[i].events & EPOLLIN) { // FIFO 可讀,嘗試讀取數(shù)據(jù) memset(buffer, 0, sizeof(buffer)); ssize_t n = read(fifo_fd, buffer, sizeof(buffer) - 1); if (n > 0) { // 正常讀取數(shù)據(jù) printf("收到數(shù)據(jù):%s\n", buffer); } else if (n == 0) { // 寫端關(guān)閉,F(xiàn)IFO 被“掛斷”,需要重新打開 printf("[INFO] FIFO 寫端關(guān)閉,嘗試重新打開...\n"); close(fifo_fd); // 重新以只讀非阻塞方式打開 FIFO fifo_fd = open(FIFO_PATH, O_RDONLY | O_NONBLOCK); if (fifo_fd == -1) { perror("[ERROR] 重新打開 FIFO 失敗"); exit(EXIT_FAILURE); } // 重新注冊到 epoll(舊 fd 已關(guān)閉) ev.data.fd = fifo_fd; epoll_ctl(epfd, EPOLL_CTL_ADD, fifo_fd, &ev); } } } } } // 程序退出前清理資源(理論上此處不會到達) close(epfd); close(fifo_fd); return 0; }

得分 100
學習任務(wù)

浪潮君 的學生作業(yè):

#include #include #include #include #include #include #include #define FIFO_PATH "/tmp/myfifo" // 有名管道路徑 #define BUFFER_SIZE 1024 int main(void) { int fd, ret; struct pollfd pfds; char buffer[BUFFER_SIZE] = {0}; // 創(chuàng)建有名管道(FIFO) // 0666 表示所有用戶都有讀寫權(quán)限 if (mkfifo(FIFO_PATH, 0666) == -1) { // 忽略管道已存在的錯誤,否則退出 if (errno != EEXIST) { perror("[ERROR] mkfifo()"); exit(EXIT_FAILURE); } } // 以非阻塞只讀模式打開管道 // O_NONBLOCK 確保 open() 和 read() 不會阻塞 fd = open(FIFO_PATH, O_RDONLY | O_NONBLOCK); if (fd == -1) { perror("[ERROR] open()"); exit(EXIT_FAILURE); } // 設(shè)置 poll 監(jiān)聽結(jié)構(gòu) pfds.fd = fd; // 監(jiān)聽管道文件描述符 pfds.events = POLLIN; // 監(jiān)聽可讀事件 printf("監(jiān)聽管道 %s ...\n", FIFO_PATH); printf("可在另一個終端執(zhí)行 'echo \"test\" > %s' 發(fā)送數(shù)據(jù)\n", FIFO_PATH); // 主循環(huán):持續(xù)監(jiān)聽管道事件 for (;;) { // 調(diào)用 poll 監(jiān)聽事件,-1 表示無限等待 ret = poll(&pfds, 1, -1); if (ret == -1) { // poll 調(diào)用失敗 perror("[ERROR] poll()"); exit(EXIT_FAILURE); } else if (ret > 0) { // 有事件發(fā)生,檢查是否為可讀事件 if (pfds.revents & POLLIN) { // 清空緩沖區(qū) memset(buffer, 0, BUFFER_SIZE); // 從管道讀取數(shù)據(jù) ssize_t bytes_read = read(fd, buffer, BUFFER_SIZE - 1); if (bytes_read == -1) { // 讀取失敗 perror("[ERROR] read()"); exit(EXIT_FAILURE); } else if (bytes_read == 0) { // 讀取到 0 字節(jié),表示所有寫端已關(guān)閉 printf("管道已關(guān)閉,等待新連接...\n"); // 關(guān)閉并重新打開管道,以等待新的寫端連接 close(fd); fd = open(FIFO_PATH, O_RDONLY | O_NONBLOCK); if (fd == -1) { perror("[ERROR] reopen()"); exit(EXIT_FAILURE); } pfds.fd = fd; // 更新 pollfd 中的文件描述符 } else { // 成功讀取數(shù)據(jù),打印內(nèi)容 printf("讀取到數(shù)據(jù): %s", buffer); } } } // ret == 0 表示超時,這里不會觸發(fā)(timeout=-1) } // 程序正常不會執(zhí)行到這里,可添加清理代碼 close(fd); // 關(guān)閉管道 unlink(FIFO_PATH); // 刪除管道文件(可選) return 0; }

微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號