在我的学校,我的项目是制作一个控制LED灯的简单程序
我的教授说outp()在conio.h中,我知道conio.h不是标准的。
outp()的例子
//assume that port to be used is 0x378
outp(0x378,1); //making the first LED light
提前致谢
答案 0 :(得分:3)
只要您对/dev/port
(root或具有写权限的用户)具有写权限,就可以通过写入/dev/port
从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
和错误处理。
答案 1 :(得分:2)
你混淆了两件事。编译器为OS制作程序。你的学校项目为DOS制作了一个程序。 outp(0x378,1);
本质上是一个DOS函数。它写入并行端口。其他操作系统使用其他命令。
GCC是一个针对多个操作系统的编译器。在每个操作系统上,GCC将能够使用特定于该系统顶部的头文件。
通常情况会更复杂一些。 DOS一次运行一个程序,因此没有端口0x378
的争用。关于每个其他操作系统同时运行更多的程序,所以你首先要弄清楚谁得到它。
答案 2 :(得分:2)
如何写入并行端口取决于操作系统,而不是编译器。在Linux中,您将为并行端口打开相应的设备文件,在PC硬件上为端口0x0378 /dev/lp1
。
然后,解释MS docs for _outp
,我想你想要写一个值为1的单字节到并行端口。那只是
FILE *fp = fopen("/dev/lp1", "wb");
// check for errors, including permission denied
putc(1, fp);