我正在Linux中启动串口编程。在网上阅读了几个例子后,我不明白Error: Target id 'android--1' is not valid. Use 'android.bat list targets' to get the target ids.
的确切效果?它正在清除位,但它会影响哪些标志?它设定或清楚了什么?
答案 0 :(得分:4)
逐一采取
1)使用函数调用
fcntl()
- 它对参数中传递的文件描述符执行操作。
2)电话中的第二个参数
F_SETFL(int)
将文件状态标志设置为arg指定的值。文件访问权限 模式(O_RDONLY,O_WRONLY,O_RDWR)和文件创建标志(即, arg中的O_CREAT,O_EXCL,O_NOCTTY,O_TRUNC)将被忽略。在Linux上这个 命令只能更改O_APPEND,O_ASYNC,O_DIRECT,O_NOATIME, 和O_NONBLOCK标志。
3)电话中的第3个参数
它是0表示,它将file status flag设置为零。 正如Jean-BaptisteYunès在评论中所说。
忽略文件访问模式和文件创建标志。这个命令 重置所有其他标志:没有追加,没有异步,没有直接,没有时间,和 没有非阻塞
最后
fcntl(fd, F_SETFL, 0)
此调用将打开文件desciptor的file status
标志设置为值0.
但理想的是这样我们不应该改变文件状态标志。
最好的方法是首先使用F_GETFL
获取当前文件状态标志,然后只更改所需的位。
见例:
如果要修改文件状态标志,则应使用F_GETFL获取当前标志并修改该值。不要认为这里列出的标志是唯一实现的标志;你的程序可能会在几年后运行,然后可能存在更多标志。例如,这是一个设置或清除标志O_NONBLOCK而不改变任何其他标志的函数:
/* Set the O_NONBLOCK flag of desc if value is nonzero,
or clear the flag if value is 0.
Return 0 on success, or -1 on error with errno set. */
int
set_nonblock_flag (int desc, int value)
{
int oldflags = fcntl (desc, F_GETFL, 0);
/* If reading the flags failed, return error indication now. */
if (oldflags == -1)
return -1;
/* Set just the flag we want to set. */
if (value != 0)
oldflags |= O_NONBLOCK;
else
oldflags &= ~O_NONBLOCK;
/* Store modified flag word in the descriptor. */
return fcntl (desc, F_SETFL, oldflags);
}
答案 1 :(得分:-2)
每个fcntl()的手册页
F_SETFL(int)
将文件状态标志设置为arg指定的值。文件 访问模式(O_RDONLY,O_WRONLY,O_RDWR)和文件创建 arg中的标志(即O_CREAT,O_EXCL,O_NOCTTY,O_TRUNC)是 忽略。在Linux上,此命令只能更改O_APPEND, O_ASYNC,O_DIRECT,O_NOATIME和O_NONBLOCK标志。它不是 可以更改O_DSYNC和O_SYNC标志;看BUGS, 下方。
这来自man page。