在我的学校,我的项目是制作一个控制 LED 灯的简单程序
我的教授说 outp() 在 conio.h 中,我知道 conio.h 不是标准的。
outp() 的例子
//assume that port to be used is 0x378
outp(0x378,1); //making the first LED light
提前致谢
在我的学校,我的项目是制作一个控制 LED 灯的简单程序
我的教授说 outp() 在 conio.h 中,我知道 conio.h 不是标准的。
outp() 的例子
//assume that port to be used is 0x378
outp(0x378,1); //making the first LED light
提前致谢
/dev/port
只要您具有写入权限/dev/port
(root 或某些具有写入权限的用户),您就可以在 Linux 的用户空间中通过写入来执行此操作。您可以在 shell 中执行以下操作:
echo -en '\001' | dd of=/dev/port bs=1 count=1 skip=888
(请注意,十进制的 888 是十六进制的 378)。我曾经以这种方式完全在 shell 脚本中为 Linux 编写了一个有效的并行端口驱动程序。(虽然它相当慢!)
您可以在 Linux 中的 C 中执行此操作,如下所示:
f = open("/dev/port", O_WRONLY);
lseek(f, 0x378, SEEK_SET);
write(f, "\01", 1);
显然,添加#include
和错误处理。
你把两件事混为一谈。编译器为操作系统制作程序。你的学校项目为 DOS 编写了一个程序。outp(0x378,1);
本质上是一个DOS功能。它写入并行端口。其他操作系统使用其他命令。
GCC 是一个针对多个操作系统的编译器。在每个操作系统上,GCC 将能够使用特定于该系统的头文件。
它通常会更复杂一些。DOS 一次运行一个程序,因此不存在对 port 的争用0x378
。几乎所有其他操作系统同时运行更多的程序,所以你首先必须弄清楚谁得到它。
如何写入并行端口取决于操作系统,而不是编译器。在 Linux 中,您将为并行端口打开适当的设备文件,该文件/dev/lp1
位于 PC 硬件上的端口 0x0378。
然后,将MS 文档解释为_outp
,我猜您想将值为 1 的单个字节写入并行端口。那只是
FILE *fp = fopen("/dev/lp1", "wb");
// check for errors, including permission denied
putc(1, fp);