当前位置: 技术问答>linux和unix
100分超菜问题,请达人不吝赐教,不胜感激!
来源: 互联网 发布时间:2015-10-14
本文导语: extern int cfsetispeed ( struct termios *, speed_t ); extern int cfsetospeed ( struct termios *, speed_t ); 的函数原型,告诉我在linux 源码的哪个目录下的哪个文件里,或者把这个函数全部贴出来 困绕了两天,确实太笨,在线...
extern int cfsetispeed ( struct termios *, speed_t );
extern int cfsetospeed ( struct termios *, speed_t );
的函数原型,告诉我在linux 源码的哪个目录下的哪个文件里,或者把这个函数全部贴出来
困绕了两天,确实太笨,在线急盼!
extern int cfsetospeed ( struct termios *, speed_t );
的函数原型,告诉我在linux 源码的哪个目录下的哪个文件里,或者把这个函数全部贴出来
困绕了两天,确实太笨,在线急盼!
|
/usr/src/lib/libc/port/gen/cfsetospeed.c
1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 */
26
27 #pragma ident "@(#)cfsetospeed.c 1.12 05/06/08 SMI"
28
29 /* Copyright (c) 1988 AT&T */
30 /* All Rights Reserved */
31
32
33 #pragma weak cfsetospeed = _cfsetospeed
34 #include "synonyms.h"
35 #include
36 #include
37
38 /*
39 * sets the output baud rate stored in c_cflag to speed
40 */
41
42 int
43 cfsetospeed(struct termios *termios_p, speed_t speed)
44 {
45 if (speed > CBAUD) {
46 termios_p->c_cflag |= CBAUDEXT;
47 speed -= (CBAUD + 1);
48 } else
49 termios_p->c_cflag &= ~CBAUDEXT;
50
51 termios_p->c_cflag =
52 (termios_p->c_cflag & ~CBAUD) | (speed & CBAUD);
53 return (0);
1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 */
26
27 #pragma ident "@(#)cfsetospeed.c 1.12 05/06/08 SMI"
28
29 /* Copyright (c) 1988 AT&T */
30 /* All Rights Reserved */
31
32
33 #pragma weak cfsetospeed = _cfsetospeed
34 #include "synonyms.h"
35 #include
36 #include
37
38 /*
39 * sets the output baud rate stored in c_cflag to speed
40 */
41
42 int
43 cfsetospeed(struct termios *termios_p, speed_t speed)
44 {
45 if (speed > CBAUD) {
46 termios_p->c_cflag |= CBAUDEXT;
47 speed -= (CBAUD + 1);
48 } else
49 termios_p->c_cflag &= ~CBAUDEXT;
50
51 termios_p->c_cflag =
52 (termios_p->c_cflag & ~CBAUD) | (speed & CBAUD);
53 return (0);
|
extern int cfsetispeed ( struct termios *, speed_t );
extern int cfsetospeed ( struct termios *, speed_t );
这两个函数由 posix 定义,恐怕要找具体实现的操作系统。
linux 中由glibcsysdepsunixsysvlinuxspeed.c 定义
/* `struct termios' speed frobnication functions. Linux version.
Copyright (C) 1991,1992,1993,1995,1996,1997,1998,2000,2002,2003
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include
#include
#include
/* This is a gross hack around a kernel bug. If the cfsetispeed functions
is called with the SPEED argument set to zero this means use the same
speed as for output. But we don't have independent input and output
speeds and therefore cannot record this.
We use an unused bit in the `c_iflag' field to keep track of this
use of `cfsetispeed'. The value here must correspond to the one used
in `tcsetattr.c'. */
#define IBAUD0 020000000000
/* Return the output baud rate stored in *TERMIOS_P. */
speed_t
cfgetospeed (termios_p)
const struct termios *termios_p;
{
return termios_p->c_cflag & (CBAUD | CBAUDEX);
}
/* Return the input baud rate stored in *TERMIOS_P.
Although for Linux there is no difference between input and output
speed, the numerical 0 is a special case for the input baud rate. It
should set the input baud rate to the output baud rate. */
speed_t
cfgetispeed (termios_p)
const struct termios *termios_p;
{
return ((termios_p->c_iflag & IBAUD0)
? 0 : termios_p->c_cflag & (CBAUD | CBAUDEX));
}
/* Set the output baud rate stored in *TERMIOS_P to SPEED. */
int
cfsetospeed (termios_p, speed)
struct termios *termios_p;
speed_t speed;
{
if ((speed & ~CBAUD) != 0
&& (speed __MAX_BAUD))
{
__set_errno (EINVAL);
return -1;
}
#ifdef _HAVE_STRUCT_TERMIOS_C_OSPEED
termios_p->c_ospeed = speed;
#endif
termios_p->c_cflag &= ~(CBAUD | CBAUDEX);
termios_p->c_cflag |= speed;
return 0;
}
libc_hidden_def (cfsetospeed)
/* Set the input baud rate stored in *TERMIOS_P to SPEED.
Although for Linux there is no difference between input and output
speed, the numerical 0 is a special case for the input baud rate. It
should set the input baud rate to the output baud rate. */
int
cfsetispeed (termios_p, speed)
struct termios *termios_p;
speed_t speed;
{
if ((speed & ~CBAUD) != 0
&& (speed __MAX_BAUD))
{
__set_errno (EINVAL);
return -1;
}
#ifdef _HAVE_STRUCT_TERMIOS_C_ISPEED
termios_p->c_ispeed = speed;
#endif
if (speed == 0)
termios_p->c_iflag |= IBAUD0;
else
{
termios_p->c_iflag &= ~IBAUD0;
termios_p->c_cflag &= ~(CBAUD | CBAUDEX);
termios_p->c_cflag |= speed;
}
return 0;
}
libc_hidden_def (cfsetispeed)
extern int cfsetospeed ( struct termios *, speed_t );
这两个函数由 posix 定义,恐怕要找具体实现的操作系统。
linux 中由glibcsysdepsunixsysvlinuxspeed.c 定义
/* `struct termios' speed frobnication functions. Linux version.
Copyright (C) 1991,1992,1993,1995,1996,1997,1998,2000,2002,2003
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include
#include
#include
/* This is a gross hack around a kernel bug. If the cfsetispeed functions
is called with the SPEED argument set to zero this means use the same
speed as for output. But we don't have independent input and output
speeds and therefore cannot record this.
We use an unused bit in the `c_iflag' field to keep track of this
use of `cfsetispeed'. The value here must correspond to the one used
in `tcsetattr.c'. */
#define IBAUD0 020000000000
/* Return the output baud rate stored in *TERMIOS_P. */
speed_t
cfgetospeed (termios_p)
const struct termios *termios_p;
{
return termios_p->c_cflag & (CBAUD | CBAUDEX);
}
/* Return the input baud rate stored in *TERMIOS_P.
Although for Linux there is no difference between input and output
speed, the numerical 0 is a special case for the input baud rate. It
should set the input baud rate to the output baud rate. */
speed_t
cfgetispeed (termios_p)
const struct termios *termios_p;
{
return ((termios_p->c_iflag & IBAUD0)
? 0 : termios_p->c_cflag & (CBAUD | CBAUDEX));
}
/* Set the output baud rate stored in *TERMIOS_P to SPEED. */
int
cfsetospeed (termios_p, speed)
struct termios *termios_p;
speed_t speed;
{
if ((speed & ~CBAUD) != 0
&& (speed __MAX_BAUD))
{
__set_errno (EINVAL);
return -1;
}
#ifdef _HAVE_STRUCT_TERMIOS_C_OSPEED
termios_p->c_ospeed = speed;
#endif
termios_p->c_cflag &= ~(CBAUD | CBAUDEX);
termios_p->c_cflag |= speed;
return 0;
}
libc_hidden_def (cfsetospeed)
/* Set the input baud rate stored in *TERMIOS_P to SPEED.
Although for Linux there is no difference between input and output
speed, the numerical 0 is a special case for the input baud rate. It
should set the input baud rate to the output baud rate. */
int
cfsetispeed (termios_p, speed)
struct termios *termios_p;
speed_t speed;
{
if ((speed & ~CBAUD) != 0
&& (speed __MAX_BAUD))
{
__set_errno (EINVAL);
return -1;
}
#ifdef _HAVE_STRUCT_TERMIOS_C_ISPEED
termios_p->c_ispeed = speed;
#endif
if (speed == 0)
termios_p->c_iflag |= IBAUD0;
else
{
termios_p->c_iflag &= ~IBAUD0;
termios_p->c_cflag &= ~(CBAUD | CBAUDEX);
termios_p->c_cflag |= speed;
}
return 0;
}
libc_hidden_def (cfsetispeed)