gpt4 book ai didi

c - 文件描述符关闭后 SCSI 驱动器旋转

转载 作者:太空宇宙 更新时间:2023-11-04 10:59:29 26 4
gpt4 key购买 nike

我有一个程序,其中未安装或以任何其他方式使用的驱动器需要降速。

我注意到在我关闭文件描述符后驱动器会自动加速。

我还没有找到任何信息,这是为什么,有什么办法可以禁用它吗?

这里有一个小程序可以自己测试一下。任何帮助或指点将不胜感激

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <scsi/sg.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
sg_io_hdr_t io_hdr;
const unsigned char stopcmdblk[6] = { 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00 };

int fd = open(argv[1], O_RDWR);
if (fd == -1) {
perror("couldn't open device");
exit(1);
}

memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
io_hdr.interface_id = 'S';
io_hdr.cmd_len = 6;
io_hdr.mx_sb_len = 32;
io_hdr.dxfer_direction = SG_DXFER_NONE;
io_hdr.dxfer_len = 0;
io_hdr.dxferp = NULL;
io_hdr.cmdp = malloc(6);
io_hdr.sbp = calloc(32, 1);

memcpy(io_hdr.cmdp, stopcmdblk, 6);

errno = 0;
int ret = ioctl(fd, SG_IO, &io_hdr);
if (ret < 0) {
perror("ioctl error");
exit(1);
}

if ((io_hdr.info & SG_INFO_OK_MASK) != SG_INFO_OK) {
printf("SCSI err\n");
exit(1);
}

printf("finished spindown\n");

sleep(30);

printf("close file now\n");

close(fd);
printf("file closed\n");

exit(0);

}

最佳答案

我猜系统想在文件关闭时将一些元数据写入磁盘。例如,文件大小——在每次 write 调用后更新文件大小似乎毫无意义。因此它会在 close 调用时更新。

我认为您需要 sync系统调用。还有一个仅适用于一个文件的 fsync 变体;但是,这与您的文件描述符无关;你想删除驱动器,所以应该处理所有文件描述符。

关于c - 文件描述符关闭后 SCSI 驱动器旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27552648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com