我有一个用 C 语言在 Linux 中编写的程序,它在 Linux 平台上运行良好,但在 Windows 上运行不佳。它在 Windows 中使用代码块 (mingw32-gcc) 编译成功,但它没有按预期工作,它只是抛出一个错误并终止程序。我怎样才能让它在Windows上工作,请帮助。这是代码:
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i, size, k = 2, ftab, sect = 3;
char buf[512];
char vbuf;
int dev, fil_descr, off=0;
fil_descr = open(argv[2], O_RDONLY);
assert(fil_descr > 0);
read(fil_descr, buf, 512);
close(fil_descr);
printf("Bootsector file: %s\n" ,argv[2]);
dev=open(argv[1], O_RDWR);
assert(dev > 0);
write(dev, buf, 512);
ftab = open("filetable", O_CREAT|O_RDWR);
sprintf(buf, "{");
write(ftab, buf, 1);
for(i = 3; i < argc; i++)
{
off = off + (k * 512);
lseek(dev, off, SEEK_SET);
fil_descr=open(argv[i], O_RDONLY);
assert(fil_descr > 0);
size = 0;
while((read(fil_descr, &vbuf, 1))!=0)
{
size++;
write(dev, &vbuf, 1);
}
k = (size > 512)?2:1;
sprintf(buf, "%s-%d," ,argv[i], sect);
write(ftab, buf, strlen(buf));
printf("Input file \'%s\' written at offset %d\n", argv[i], off);
close(fil_descr);
sect = sect + k;
}
sprintf(buf,"}");
write(ftab, buf, 1);
lseek(ftab, 0, SEEK_SET);
read(ftab, buf, 512);
lseek(dev, 512, SEEK_SET);
write(dev, buf, 512);
close (dev);
close(ftab);
}
最佳答案
这不是不能在 Windows 下运行的 C 程序(尽管 C 是所使用的编程语言)。
尝试使用 POSIX API 函数(例如 open
、read
、write
)编译程序是行不通的针对 Win32 的编译器。这包括使用此环境中不存在的多个 header (如果存在,将声明系统中不存在的函数)。
您将不得不使用 Unix 兼容层(Microsoft 曾经出售过它,不确定他们是否仍然这样做,Cygwin 也可能工作),或者使用适当的 C,或者使用 native Win32 API 函数。
也就是说,如果您切换到使用 C 标准库 I/O 函数或 native Win32 函数,它也可能无法按预期方式工作。输出“Bootsector:
”表明您正在尝试的东西在系统驱动器上根本不起作用,只能在另一个磁盘上使用管理权限。
关于c - 为什么用 C 编写的程序不能在 Windows 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25523571/