gcc编译器中的outp()对应是什么?

时间:2011-10-03 11:47:28

标签: c linux gcc parallel-port

在我的学校,我的项目是制作一个控制LED灯的简单程序

我的教授说outp()在conio.h中,我知道conio.h不是标准的。

outp()的例子

//assume that port to be used is 0x378
outp(0x378,1); //making the first LED light

提前致谢

3 个答案:

答案 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);