非阻塞输出
以下是linux c 一站式编程的一个例子,小弟照着打了一遍 ,运行的时候发现输入怎么样都无法跳出循环 求大神指导
#include <unistd.h> // for read and write
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define MSG_TRY "try again\n"
int main( void )
{
char buf[10];
int fd , readn;
fd = open( "/dev/tty" , O_RDONLY | O_NONBLOCK );
if( fd < 0 )
{
perror( "open /dev/tty" );
exit(1);
}
tryagain:
readn = read( fd , buf , 10 );
if( readn < 0 )
{
if( errno == EAGAIN )
{
sleep(3);
write( STDOUT_FILENO , MSG_TRY , strlen(MSG_TRY) );
goto tryagain;
}
else
{
perror("read /dev/tty");
exit(1);
}
}
write( STDOUT_FILENO , buf , readn );
close(fd);
return 0;
}
...全文
相关推荐
cmd:Go中的非阻塞外部命令以及流输出和并发安全访问
go-cmd / Cmd 该软件包是一个很小但非常有用的包装,它使在高度并发,异步,实时的应用程序中运行外部命令安全而简单。 它可以在Linux,macOS和Windows上运行。 基本用法如下: import ( "fmt" "time" "github.com/go-cmd/cmd" ) func main () { // Start a long-running process, capture stdout and stderr findCmd := cmd . NewCmd ( "find" , "/" , "--name" , "needle" ) statusChan := findCmd . Start () // non-blocking ticker := time . NewTicker ( 2 * time . Second ) // Print
ProcessBuilder非阻塞是调用
ProcessBuilder非阻塞是调用ProcessBuilder非阻塞是调用ProcessBuilder非阻塞是调用ProcessBuilder非阻塞是调用ProcessBuilder非阻塞是调用
Java 非阻塞I/O使用方法
主要介绍了Java 非阻塞I/O使用方法,文中涉及非阻塞I/O的简介,同时向大家展示了利用非阻塞I/O实现客户端的方法,需要的朋友可以参考下。
Verilog中阻塞赋值和非阻塞赋值的正确使用
文章主要介绍Verilog中阻塞赋值和非阻塞赋值的正确使用方法。
基于AWG的非阻塞Clos网络
基于AWG的非阻塞Clos网络


