有没有更好的方法来编写设备文件而不是多次写入?

时间:2018-05-18 13:11:52

标签: c

实际上,我想在我的Linux设备中将LED指示灯闪烁三次。

我可以通过将1和0简单地测试为echo "1" > /dev/ipuc/ledd

来实现这一点

我希望这是在C程序中,它最终会像这样,我想避免这么多写。下面的代码是外行实现,write会有返回代码以获得更好的虚假证明。

代码

static char *ledd = "/dev/ipuc/ledd";
int fd = -1;
if( (fd = open(ledd, O_RDWR ) ) == -1 )
{
        perror( ledd );
}
write(fd, "1", 1);
write(fd, "0", 1);
write(fd, "1", 1);
write(fd, "0", 1);
write(fd, "1", 1);
write(fd, "0", 1);

2 个答案:

答案 0 :(得分:6)

结合答案和评论:

char sequence[] = "1101001"; // Whatever sequence here 
char *s = sequence;

while (*s)
{
    write(fd, *s++, 1);
    usleep(300000); // Or some other delay facility
}

如果您只是想COUNT / 2次闪烁:

unsigned int i;

for (i = 0; i < COUNT; i++)
{
    write(fd, '0' + (i % 2), 1);
    usleep(300000); // Or some other delay facility
} 

或者如果你想永远闪烁它:

unsigned int i = 0;
while(1)
{
    i ^= 1; // Toggle  LSB
    write(fd, '0' + i, 1);
    usleep(300000); // Or some other delay facility
} 

答案 1 :(得分:2)

为什么不一次写下所有数据?

char towrite[] = "101010";
write(fd,towrite,sizeof(towrite));  // or strlen if char pointer

一次写入,写入6个字节。

但是,时间可能与6次调用write的代码不同。如果您必须在写入之间等待,那么您显然无法立即写入所有数据(与Print a string char by char with a delay after each char相同的问题)