/* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
version 2.1 of the License, or (at your option) any later version.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
02111-1307 USA. */
binary compatibility. */
binary compatibility. */
binary compatibility. */
/* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
version 2.1 of the License, or (at your option) any later version.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
02111-1307 USA. */
/* Thread identifiers. The structure of the attribute type is not
exposed on purpose. */
/* Data structures for mutex handling. The structure of the attribute
type is not exposed on purpose. */
binary compatibility. */
/* Data structure for conditional variable handling. The structure of
the attribute type is not exposed on purpose. */
/* Data structure for read-write lock variable handling. The
structure of the attribute type is not exposed on purpose. */
binary compatibility. */
binary compatibility. */
/* POSIX spinlock data type. */
/* POSIX barriers data type. The structure of the type is
deliberately not exposed. */
/* Extra attributes for the cleanup functions. */
1c1,2
< /* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
---
> /* bits/types.h -- definitions of __*_t types underlying *_t types.
> Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
3d3
< Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
20,21c20,22
< #ifndef _BITS_PTHREADTYPES_H
< #define _BITS_PTHREADTYPES_H
1
---
> /*
> * Never include this file directly; use <sys/types.h> instead.
> */
22a24,27
> #ifndef
_BITS_TYPES_H
> #define
_BITS_TYPES_H
1
>
> #include <features.h>
24a30,42
> /* Convenience types. */
> typedef unsigned char __u_char;
> typedef unsigned short int __u_short;
> typedef unsigned int __u_int;
> typedef unsigned long int __u_long;
>
> /* Fixed-size types, underlying types depend on word size and compiler. */
> typedef signed char __int8_t;
> typedef unsigned char __uint8_t;
> typedef signed short int __int16_t;
> typedef unsigned short int __uint16_t;
> typedef signed int __int32_t;
> typedef unsigned int __uint32_t;
26,44c44,48
< # define __SIZEOF_PTHREAD_ATTR_T 56
< # define __SIZEOF_PTHREAD_MUTEX_T 40
< # define __SIZEOF_PTHREAD_MUTEXATTR_T 4
< # define __SIZEOF_PTHREAD_COND_T 48
< # define __SIZEOF_PTHREAD_CONDATTR_T 4
< # define __SIZEOF_PTHREAD_RWLOCK_T 56
< # define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
< # define __SIZEOF_PTHREAD_BARRIER_T 32
< # define __SIZEOF_PTHREAD_BARRIERATTR_T 4
< #else
< # define __SIZEOF_PTHREAD_ATTR_T 36
< # define __SIZEOF_PTHREAD_MUTEX_T 24
< # define __SIZEOF_PTHREAD_MUTEXATTR_T 4
< # define __SIZEOF_PTHREAD_COND_T 48
< # define __SIZEOF_PTHREAD_CONDATTR_T 4
< # define __SIZEOF_PTHREAD_RWLOCK_T 32
< # define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
< # define __SIZEOF_PTHREAD_BARRIER_T 20
< # define __SIZEOF_PTHREAD_BARRIERATTR_T 4
---
> typedef signed long int __int64_t;
> typedef unsigned long int __uint64_t;
> #elif defined __GLIBC_HAVE_LONG_LONG
> __extension__ typedef signed long long int __int64_t;
> __extension__ typedef unsigned long long int __uint64_t;
47,59c51
<
< /* Thread identifiers. The structure of the attribute type is not
< exposed on purpose. */
< typedef unsigned long int pthread_t;
<
<
< typedef union
< {
< char __size[__SIZEOF_PTHREAD_ATTR_T];
< long int __align;
< } pthread_attr_t;
<
<
---
> /* quad_t is also 64 bits. */
61,65c53,57
< typedef struct __pthread_internal_list
< {
< struct __pthread_internal_list *__prev;
< struct __pthread_internal_list *__next;
< } __pthread_list_t;
---
> typedef long int __quad_t;
> typedef unsigned long int __u_quad_t;
> #elif defined __GLIBC_HAVE_LONG_LONG
> __extension__ typedef long long int __quad_t;
> __extension__ typedef unsigned long long int __u_quad_t;
67c59
< typedef struct __pthread_internal_slist
---
> typedef struct
69,70c61,66
< struct __pthread_internal_slist *__next;
< } __pthread_slist_t;
---
> long __val[2];
> } __quad_t;
> typedef struct
> {
> __u_long __val[2];
> } __u_quad_t;
74,92c70,127
< /* Data structures for mutex handling. The structure of the attribute
< type is not exposed on purpose. */
< typedef union
< {
< struct __pthread_mutex_s
< {
< int __lock;
< unsigned int __count;
< int __owner;
< #if __WORDSIZE == 64
< unsigned int __nusers;
< #endif
< /* KIND must stay at this position in the structure to maintain
< binary compatibility. */
< int __kind;
< #if __WORDSIZE == 64
< int __spins;
< __pthread_list_t __list;
< # define __PTHREAD_MUTEX_HAVE_PREV
1
---
> /* The machine-dependent file <bits/typesizes.h> defines __*_T_TYPE
> macros for each of the OS types we define below. The definitions
> of those macros must use the following macros for underlying types.
> We define __S<SIZE>_TYPE and __U<SIZE>_TYPE for the signed and unsigned
> variants of each of the following integer types on this machine.
>
>
16
-- "natural" 16-bit type (always short)
>
32
-- "natural" 32-bit type (always int)
>
64
-- "natural" 64-bit type (long or long long)
>
LONG32
-- 32-bit type, traditionally long
>
QUAD
-- 64-bit type, always long long
>
WORD
-- natural type of __WORDSIZE bits (int or long)
>
LONGWORD
-- type of __WORDSIZE bits, traditionally long
>
> We distinguish WORD/LONGWORD, 32/LONG32, and 64/QUAD so that the
> conventional uses of `long' or `long long' type modifiers match the
> types we define, even when a less-adorned type would be the same size.
> This matters for (somewhat) portably writing printf/scanf formats for
> these types, where using the appropriate l or ll format modifiers can
> make the typedefs and the formats match up across all GNU platforms. If
> we used `long' when it's 64 bits where `long long' is expected, then the
> compiler would warn about the formats not matching the argument types,
> and the programmer changing them to shut up the compiler would break the
> program's portability.
>
> Here we assume what is presently the case in all the GCC configurations
> we support: long long is always 64 bits, long is always word/address size,
> and int is always 32 bits. */
>
> #define
__S16_TYPE
short int
> #define __U16_TYPE
unsigned short int
> #define
__S32_TYPE
int
> #define __U32_TYPE
unsigned int
> #define __SLONGWORD_TYPE
long int
> #define __ULONGWORD_TYPE
unsigned long int
> #if __WORDSIZE == 32
> # define __SQUAD_TYPE
__quad_t
> # define __UQUAD_TYPE
__u_quad_t
> # define __SWORD_TYPE
int
> # define __UWORD_TYPE
unsigned int
> # define __SLONG32_TYPE
long int
> # define __ULONG32_TYPE
unsigned long int
> # define __S64_TYPE
__quad_t
> # define __U64_TYPE
__u_quad_t
> /* We want __extension__ before typedef's that use nonstandard base types
> such as `long long' in C89 mode. */
> # define __STD_TYPE
__extension__ typedef
> #elif __WORDSIZE == 64
> # define __SQUAD_TYPE
long int
> # define __UQUAD_TYPE
unsigned long int
> # define __SWORD_TYPE
long int
> # define __UWORD_TYPE
unsigned long int
> # define __SLONG32_TYPE
int
> # define __ULONG32_TYPE
unsigned int
> # define __S64_TYPE
long int
> # define __U64_TYPE
unsigned long int
> /* No need to mark the typedef with __extension__. */
> # define __STD_TYPE
typedef
94,99c129
< unsigned int __nusers;
< __extension__ union
< {
< int __spins;
< __pthread_slist_t __list;
< };
---
> # error
101,104c131
< } __data;
< char __size[__SIZEOF_PTHREAD_MUTEX_T];
< long int __align;
< } pthread_mutex_t;
---
> #include <bits/typesizes.h>
/* Defines __*_T_TYPE macros. */
106,110d132
< typedef union
< {
< char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
< int __align;
< } pthread_mutexattr_t;
111a134,151
> __STD_TYPE __DEV_T_TYPE __dev_t;
/* Type of device numbers. */
> __STD_TYPE __UID_T_TYPE __uid_t;
/* Type of user identifications. */
> __STD_TYPE __GID_T_TYPE __gid_t;
/* Type of group identifications. */
> __STD_TYPE __INO_T_TYPE __ino_t;
/* Type of file serial numbers. */
> __STD_TYPE __INO64_T_TYPE __ino64_t;
/* Type of file serial numbers (LFS).*/
> __STD_TYPE __MODE_T_TYPE __mode_t;
/* Type of file attribute bitmasks. */
> __STD_TYPE __NLINK_T_TYPE __nlink_t;
/* Type of file link counts. */
> __STD_TYPE __OFF_T_TYPE __off_t;
/* Type of file sizes and offsets. */
> __STD_TYPE __OFF64_T_TYPE __off64_t;
/* Type of file sizes and offsets (LFS). */
> __STD_TYPE __PID_T_TYPE __pid_t;
/* Type of process identifications. */
> __STD_TYPE __FSID_T_TYPE __fsid_t;
/* Type of file system IDs. */
> __STD_TYPE __CLOCK_T_TYPE __clock_t;
/* Type of CPU usage counts. */
> __STD_TYPE __RLIM_T_TYPE __rlim_t;
/* Type for resource measurement. */
> __STD_TYPE __RLIM64_T_TYPE __rlim64_t;
/* Type for resource measurement (LFS). */
> __STD_TYPE __ID_T_TYPE __id_t;
/* General type for IDs. */
> __STD_TYPE __TIME_T_TYPE __time_t;
/* Seconds since the Epoch. */
> __STD_TYPE __USECONDS_T_TYPE __useconds_t; /* Count of microseconds. */
> __STD_TYPE __SUSECONDS_T_TYPE __suseconds_t; /* Signed count of microseconds. */
113,130c153,155
< /* Data structure for conditional variable handling. The structure of
< the attribute type is not exposed on purpose. */
< typedef union
< {
< struct
< {
< int __lock;
< unsigned int __futex;
< __extension__ unsigned long long int __total_seq;
< __extension__ unsigned long long int __wakeup_seq;
< __extension__ unsigned long long int __woken_seq;
< void *__mutex;
< unsigned int __nwaiters;
< unsigned int __broadcast_seq;
< } __data;
< char __size[__SIZEOF_PTHREAD_COND_T];
< __extension__ long long int __align;
< } pthread_cond_t;
---
> __STD_TYPE __DADDR_T_TYPE __daddr_t;
/* The type of a disk address. */
> __STD_TYPE __SWBLK_T_TYPE __swblk_t;
/* Type of a swap block maybe? */
> __STD_TYPE __KEY_T_TYPE __key_t;
/* Type of an IPC key. */
132,136c157,158
< typedef union
< {
< char __size[__SIZEOF_PTHREAD_CONDATTR_T];
< int __align;
< } pthread_condattr_t;
---
> /* Clock ID used in clock and timer functions. */
> __STD_TYPE __CLOCKID_T_TYPE __clockid_t;
137a160,161
> /* Timer ID returned by `timer_create'. */
> __STD_TYPE __TIMER_T_TYPE __timer_t;
139,140c163,164
< /* Keys for thread-specific data */
< typedef unsigned int pthread_key_t;
---
> /* Type to represent block size. */
> __STD_TYPE __BLKSIZE_T_TYPE __blksize_t;
141a166
> /* Types from the Large File Support interface. */
143,144c168,170
< /* Once-only execution */
< typedef int pthread_once_t;
---
> /* Type to count number of disk blocks. */
> __STD_TYPE __BLKCNT_T_TYPE __blkcnt_t;
> __STD_TYPE __BLKCNT64_T_TYPE __blkcnt64_t;
145a172,174
> /* Type to count file system blocks. */
> __STD_TYPE __FSBLKCNT_T_TYPE __fsblkcnt_t;
> __STD_TYPE __FSBLKCNT64_T_TYPE __fsblkcnt64_t;
147,189c176,178
< #if defined __USE_UNIX98 || defined __USE_XOPEN2K
< /* Data structure for read-write lock variable handling. The
< structure of the attribute type is not exposed on purpose. */
< typedef union
< {
< # if __WORDSIZE == 64
< struct
< {
< int __lock;
< unsigned int __nr_readers;
< unsigned int __readers_wakeup;
< unsigned int __writer_wakeup;
< unsigned int __nr_readers_queued;
< unsigned int __nr_writers_queued;
< int __writer;
< int __shared;
< unsigned long int __pad1;
< unsigned long int __pad2;
< /* FLAGS must stay at this position in the structure to maintain
< binary compatibility. */
< unsigned int __flags;
< } __data;
< # else
< struct
< {
< int __lock;
< unsigned int __nr_readers;
< unsigned int __readers_wakeup;
< unsigned int __writer_wakeup;
< unsigned int __nr_readers_queued;
< unsigned int __nr_writers_queued;
< /* FLAGS must stay at this position in the structure to maintain
< binary compatibility. */
< unsigned char __flags;
< unsigned char __shared;
< unsigned char __pad1;
< unsigned char __pad2;
< int __writer;
< } __data;
< # endif
< char __size[__SIZEOF_PTHREAD_RWLOCK_T];
< long int __align;
< } pthread_rwlock_t;
---
> /* Type to count file system nodes. */
> __STD_TYPE __FSFILCNT_T_TYPE __fsfilcnt_t;
> __STD_TYPE __FSFILCNT64_T_TYPE __fsfilcnt64_t;
191,196c180
< typedef union
< {
< char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
< long int __align;
< } pthread_rwlockattr_t;
< #endif
---
> __STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count, or error. */
197a182,186
> /* These few don't really vary by system, they always correspond
> to one of the other defined types. */
> typedef __off64_t __loff_t;
/* Type of file sizes and offsets (LFS). */
> typedef __quad_t *__qaddr_t;
> typedef char *__caddr_t;
199,201c188,189
< #ifdef __USE_XOPEN2K
< /* POSIX spinlock data type. */
< typedef volatile int pthread_spinlock_t;
---
> /* Duplicates info from stdint.h but this is used in unistd.h. */
> __STD_TYPE __SWORD_TYPE __intptr_t;
202a191,192
> /* Duplicate info from sys/socket.h. */
> __STD_TYPE __U32_TYPE __socklen_t;
204,210d193
< /* POSIX barriers data type. The structure of the type is
< deliberately not exposed. */
< typedef union
< {
< char __size[__SIZEOF_PTHREAD_BARRIER_T];
< long int __align;
< } pthread_barrier_t;
212,223c195
< typedef union
< {
< char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
< int __align;
< } pthread_barrierattr_t;
< #endif
<
<
< #if __WORDSIZE == 32
< /* Extra attributes for the cleanup functions. */
< # define __cleanup_fct_attribute __attribute__ ((__regparm__ (1)))
< #endif
---
> #undef __STD_TYPE
225c197
< #endif
/* bits/pthreadtypes.h */
---
> #endif /* bits/types.h */
diff命令的使用
摘要:本文详细介绍了diff命令的基本用法
作者:zieckey (zieckey@yahoo.com.cn)
All Rights Reserved!
有这样两个文件:
程序清单1 :hello.c
#include <stdio.h>
int main(void)
{
char msg[] = "Hello world!";
puts(msg);
printf("Welcome to use diff commond./n");
return 0;
}
程序清单2:hello_diff.c
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char msg[] = "Hello world,fome hello_diff.c";
puts(msg);
printf("hello_diff.c says,'Here you are,using diff.'/n");
return 0;
}
我们使用diff命令来查看这两个文件的不同之处,有一下几种方便的方法:
1、普通格式输出:
[root@localhost diff]# diff hello.c hello_diff.c
1a2
> #include <stdlib.h>
5c6
< char msg[] = "Hello world!";
---
> char msg[] = "Hello world,fome hello_diff.c";
8c9
< printf("Welcome to use diff commond./n");
---
> printf("hello_diff.c says,'Here you are,using diff.'/n");
[root@localhost diff]#
上面的“1
a2”表示后面的一个文件"hello_diff.c"比前面的一个文件"hello.c"
多了一行
"5
c6"表示第一个文件的第5行与第二个文件的第6行
有区别
2、并排格式输出
[root@localhost diff]# diff hello.c hello_diff.c
-y -W 130
root@ubuntu:/usr/include/bits# diff pthreadtypes.h types.h -y -W 130>/home/zhangbin/code/comparefile1.txt
diff: option requires an argument -- 'W'
diff: Try `diff --help' for more information.
root@ubuntu:/usr/include/bits# diff pthreadtypes.h types.h
-y -W 130 > /home/zhangbin/code/comparefile1.txt
是因为130后面,没有加上空格。
#include <stdio.h> #include <stdio.h>
> #include <stdlib.h>
int main(void) int main(void)
{ {
char msg[] = "Hello world!"; | char msg[] = "Hello world,fome hello_diff.c";
puts(msg); puts(msg);
printf("Welcome to use diff commond./n"); | printf("hello_diff.c says,'Here you are,using diff.'/
return 0; return 0;
} }
我运行的结果:
/* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software |
/* bits/types.h -- definitions of __*_t types underlying *_t
>
Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software F
This file is part of the GNU C Library.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. <
The GNU C Library is free software; you can redistribute i
The GNU C Library is free software; you can redistribute i
modify it under the terms of the GNU Lesser General Public
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; eith
License as published by the Free Software Foundation; eith
version 2.1 of the License, or (at your option) any later
version 2.1 of the License, or (at your option) any later
The GNU C Library is distributed in the hope that it will
The GNU C Library is distributed in the hope that it will
but WITHOUT ANY WARRANTY; without even the implied warrant
but WITHOUT ANY WARRANTY; without even the implied warrant
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
Lesser General Public License for more details.
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
You should have received a copy of the GNU Lesser General
License along with the GNU C Library; if not, write to the
License along with the GNU C Library; if not, write to the
Software Foundation, Inc., 59 Temple Place, Suite 330, Bos
Software Foundation, Inc., 59 Temple Place, Suite 330, Bos
02111-1307 USA. */
02111-1307 USA. */
#ifndef _BITS_PTHREADTYPES_H
|
/*
#define _BITS_PTHREADTYPES_H
1
|
* Never include this file directly; use <sys/types.h> instea
>
*/
>
#ifndef
_BITS_TYPES_H
>
#define
_BITS_TYPES_H
1
>
>
#include <features.h>
#include <bits/wordsize.h>
#include <bits/wordsize.h>
>
/* Convenience types. */
>
typedef unsigned char __u_char;
>
typedef unsigned short int __u_short;
>
typedef unsigned int __u_int;
>
typedef unsigned long int __u_long;
>
>
/* Fixed-size types, underlying types depend on word size and
>
typedef signed char __int8_t;
>
typedef unsigned char __uint8_t;
>
typedef signed short int __int16_t;
>
typedef unsigned short int __uint16_t;
>
typedef signed int __int32_t;
>
typedef unsigned int __uint32_t;
#if __WORDSIZE == 64
#if __WORDSIZE == 64
# define __SIZEOF_PTHREAD_ATTR_T 56
|
typedef signed long int __int64_t;
# define __SIZEOF_PTHREAD_MUTEX_T 40
|
typedef unsigned long int __uint64_t;
# define __SIZEOF_PTHREAD_MUTEXATTR_T 4
|
#elif defined __GLIBC_HAVE_LONG_LONG
# define __SIZEOF_PTHREAD_COND_T 48
|
__extension__ typedef signed long long int __int64_t;
# define __SIZEOF_PTHREAD_CONDATTR_T 4
|
__extension__ typedef unsigned long long int __uint64_t;
# define __SIZEOF_PTHREAD_RWLOCK_T 56
<
# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
<
# define __SIZEOF_PTHREAD_BARRIER_T 32
<
# define __SIZEOF_PTHREAD_BARRIERATTR_T 4
<
#else
<
# define __SIZEOF_PTHREAD_ATTR_T 36
<
# define __SIZEOF_PTHREAD_MUTEX_T 24
<
# define __SIZEOF_PTHREAD_MUTEXATTR_T 4
<
# define __SIZEOF_PTHREAD_COND_T 48
<
# define __SIZEOF_PTHREAD_CONDATTR_T 4
<
# define __SIZEOF_PTHREAD_RWLOCK_T 32
<
# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
<
# define __SIZEOF_PTHREAD_BARRIER_T 20
<
# define __SIZEOF_PTHREAD_BARRIERATTR_T 4
<
#endif
#endif
|
/* quad_t is also 64 bits. */
/* Thread identifiers. The structure of the attribute type i <
exposed on purpose. */
<
typedef unsigned long int pthread_t;
<
<
<
typedef union
<
{
<
char __size[__SIZEOF_PTHREAD_ATTR_T];
<
long int __align;
<
} pthread_attr_t;
<
<
<
#if __WORDSIZE == 64
#if __WORDSIZE == 64
typedef struct __pthread_internal_list
|
typedef long int __quad_t;
{
|
typedef unsigned long int __u_quad_t;
struct __pthread_internal_list *__prev;
|
#elif defined __GLIBC_HAVE_LONG_LONG
struct __pthread_internal_list *__next;
|
__extension__ typedef long long int __quad_t;
} __pthread_list_t;
|
__extension__ typedef unsigned long long int __u_quad_t;
#else
#else
typedef struct __pthread_internal_slist
|
typedef struct
{
{
struct __pthread_internal_slist *__next;
|
long __val[2];
} __pthread_slist_t;
|
} __quad_t;
>
typedef struct
>
{
>
__u_long __val[2];
>
} __u_quad_t;
#endif
#endif
/* Data structures for mutex handling. The structure of the |
/* The machine-dependent file <bits/typesizes.h> defines __*_
type is not exposed on purpose. */
|
macros for each of the OS types we define below. The defi
typedef union
|
of those macros must use the following macros for underlyi
{
|
We define __S<SIZE>_TYPE and __U<SIZE>_TYPE for the signed
struct __pthread_mutex_s
|
variants of each of the following integer types on this ma
{
|
int __lock;
|
16
-- "natural" 16-bit type (always shor
unsigned int __count;
|
32
-- "natural" 32-bit type (always int)
int __owner;
|
64
-- "natural" 64-bit type (long or lon
#if __WORDSIZE == 64
|
LONG32
-- 32-bit type, traditionally long
unsigned int __nusers;
|
QUAD
-- 64-bit type, always long long
#endif
|
WORD
-- natural type of __WORDSIZE bits (i
/* KIND must stay at this position in the structure to ma |
LONGWORD
-- type of __WORDSIZE bits, tradition
binary compatibility. */
|
int __kind;
|
We distinguish WORD/LONGWORD, 32/LONG32, and 64/QUAD so th
#if __WORDSIZE == 64
|
conventional uses of `long' or `long long' type modifiers
int __spins;
|
types we define, even when a less-adorned type would be th
__pthread_list_t __list;
|
This matters for (somewhat) portably writing printf/scanf
# define __PTHREAD_MUTEX_HAVE_PREV
1
|
these types, where using the appropriate l or ll format mo
>
make the typedefs and the formats match up across all GNU
>
we used `long' when it's 64 bits where `long long' is expe
>
compiler would warn about the formats not matching the arg
>
and the programmer changing them to shut up the compiler w
>
program's portability.
>
>
Here we assume what is presently the case in all the GCC c
>
we support: long long is always 64 bits, long is always wo
>
and int is always 32 bits. */
>
>
#define
__S16_TYPE
short int
>
#define __U16_TYPE
unsigned short int
>
#define
__S32_TYPE
int
>
#define __U32_TYPE
unsigned int
>
#define __SLONGWORD_TYPE
long int
>
#define __ULONGWORD_TYPE
unsigned long int
>
#if __WORDSIZE == 32
>
# define __SQUAD_TYPE
__quad_t
>
# define __UQUAD_TYPE
__u_quad_t
>
# define __SWORD_TYPE
int
>
# define __UWORD_TYPE
unsigned int
>
# define __SLONG32_TYPE
long int
>
# define __ULONG32_TYPE
unsigned long int
>
# define __S64_TYPE
__quad_t
>
# define __U64_TYPE
__u_quad_t
>
/* We want __extension__ before typedef's that use nonstandar
>
such as `long long' in C89 mode. */
>
# define __STD_TYPE
__extension__ typedef
>
#elif __WORDSIZE == 64
>
# define __SQUAD_TYPE
long int
>
# define __UQUAD_TYPE
unsigned long int
>
# define __SWORD_TYPE
long int
>
# define __UWORD_TYPE
unsigned long int
>
# define __SLONG32_TYPE
int
>
# define __ULONG32_TYPE
unsigned int
>
# define __S64_TYPE
long int
>
# define __U64_TYPE
unsigned long int
>
/* No need to mark the typedef with __extension__. */
>
# define __STD_TYPE
typedef
#else
#else
unsigned int __nusers;
|
# error
__extension__ union
<
{
<
int __spins;
<
__pthread_slist_t __list;
<
};
<
#endif
#endif
} __data;
|
#include <bits/typesizes.h>
/* Defines __*_T_TYPE macros.
char __size[__SIZEOF_PTHREAD_MUTEX_T];
<
long int __align;
<
} pthread_mutex_t;
<
typedef union
<
{
<
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
<
int __align;
<
} pthread_mutexattr_t;
<
>
__STD_TYPE __DEV_T_TYPE __dev_t;
/* Type of device num
>
__STD_TYPE __UID_T_TYPE __uid_t;
/* Type of user ident
>
__STD_TYPE __GID_T_TYPE __gid_t;
/* Type of group iden
>
__STD_TYPE __INO_T_TYPE __ino_t;
/* Type of file seria
>
__STD_TYPE __INO64_T_TYPE __ino64_t;
/* Type of file seria
>
__STD_TYPE __MODE_T_TYPE __mode_t;
/* Type of file attri
>
__STD_TYPE __NLINK_T_TYPE __nlink_t;
/* Type of file link
>
__STD_TYPE __OFF_T_TYPE __off_t;
/* Type of file sizes
>
__STD_TYPE __OFF64_T_TYPE __off64_t;
/* Type of file sizes
>
__STD_TYPE __PID_T_TYPE __pid_t;
/* Type of process id
>
__STD_TYPE __FSID_T_TYPE __fsid_t;
/* Type of file syste
>
__STD_TYPE __CLOCK_T_TYPE __clock_t;
/* Type of CPU usage
>
__STD_TYPE __RLIM_T_TYPE __rlim_t;
/* Type for resource
>
__STD_TYPE __RLIM64_T_TYPE __rlim64_t;
/* Type for resource
>
__STD_TYPE __ID_T_TYPE __id_t;
/* General type for I
>
__STD_TYPE __TIME_T_TYPE __time_t;
/* Seconds since the
>
__STD_TYPE __USECONDS_T_TYPE __useconds_t; /* Count of micros
>
__STD_TYPE __SUSECONDS_T_TYPE __suseconds_t; /* Signed count
/* Data structure for conditional variable handling. The str |
__STD_TYPE __DADDR_T_TYPE __daddr_t;
/* The type of a disk
the attribute type is not exposed on purpose. */
|
__STD_TYPE __SWBLK_T_TYPE __swblk_t;
/* Type of a swap blo
typedef union
|
__STD_TYPE __KEY_T_TYPE __key_t;
/* Type of an IPC key
{
<
struct
<
{
<
int __lock;
<
unsigned int __futex;
<
__extension__ unsigned long long int __total_seq;
<
__extension__ unsigned long long int __wakeup_seq;
<
__extension__ unsigned long long int __woken_seq;
<
void *__mutex;
<
unsigned int __nwaiters;
<
unsigned int __broadcast_seq;
<
} __data;
<
char __size[__SIZEOF_PTHREAD_COND_T];
<
__extension__ long long int __align;
<
} pthread_cond_t;
<
typedef union
|
/* Clock ID used in clock and timer functions. */
{
|
__STD_TYPE __CLOCKID_T_TYPE __clockid_t;
char __size[__SIZEOF_PTHREAD_CONDATTR_T];
<
int __align;
<
} pthread_condattr_t;
<
>
/* Timer ID returned by `timer_create'. */
>
__STD_TYPE __TIMER_T_TYPE __timer_t;
/* Keys for thread-specific data */
|
/* Type to represent block size. */
typedef unsigned int pthread_key_t;
|
__STD_TYPE __BLKSIZE_T_TYPE __blksize_t;
>
/* Types from the Large File Support interface. */
/* Once-only execution */
|
/* Type to count number of disk blocks. */
typedef int pthread_once_t;
|
__STD_TYPE __BLKCNT_T_TYPE __blkcnt_t;
>
__STD_TYPE __BLKCNT64_T_TYPE __blkcnt64_t;
>
/* Type to count file system blocks. */
>
__STD_TYPE __FSBLKCNT_T_TYPE __fsblkcnt_t;
>
__STD_TYPE __FSBLKCNT64_T_TYPE __fsblkcnt64_t;
#if defined __USE_UNIX98 || defined __USE_XOPEN2K
|
/* Type to count file system nodes. */
/* Data structure for read-write lock variable handling. The |
__STD_TYPE __FSFILCNT_T_TYPE __fsfilcnt_t;
structure of the attribute type is not exposed on purpose. |
__STD_TYPE __FSFILCNT64_T_TYPE __fsfilcnt64_t;
typedef union
<
{
<
# if __WORDSIZE == 64
<
struct
<
{
<
int __lock;
<
unsigned int __nr_readers;
<
unsigned int __readers_wakeup;
<
unsigned int __writer_wakeup;
<
unsigned int __nr_readers_queued;
<
unsigned int __nr_writers_queued;
<
int __writer;
<
int __shared;
<
unsigned long int __pad1;
<
unsigned long int __pad2;
<
/* FLAGS must stay at this position in the structure to m <
binary compatibility. */
<
unsigned int __flags;
<
} __data;
<
# else
<
struct
<
{
<
int __lock;
<
unsigned int __nr_readers;
<
unsigned int __readers_wakeup;
<
unsigned int __writer_wakeup;
<
unsigned int __nr_readers_queued;
<
unsigned int __nr_writers_queued;
<
/* FLAGS must stay at this position in the structure to m <
binary compatibility. */
<
unsigned char __flags;
<
unsigned char __shared;
<
unsigned char __pad1;
<
unsigned char __pad2;
<
int __writer;
<
} __data;
<
# endif
<
char __size[__SIZEOF_PTHREAD_RWLOCK_T];
<
long int __align;
<
} pthread_rwlock_t;
<
typedef union
|
__STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count,
{
<
char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
<
long int __align;
<
} pthread_rwlockattr_t;
<
#endif
<
>
/* These few don't really vary by system, they always corresp
>
to one of the other defined types. */
>
typedef __off64_t __loff_t;
/* Type of file sizes and off
>
typedef __quad_t *__qaddr_t;
>
typedef char *__caddr_t;
#ifdef __USE_XOPEN2K
|
/* Duplicates info from stdint.h but this is used in unistd.h
/* POSIX spinlock data type. */
|
__STD_TYPE __SWORD_TYPE __intptr_t;
typedef volatile int pthread_spinlock_t;
<
>
/* Duplicate info from sys/socket.h. */
>
__STD_TYPE __U32_TYPE __socklen_t;
/* POSIX barriers data type. The structure of the type is <
deliberately not exposed. */
<
typedef union
<
{
<
char __size[__SIZEOF_PTHREAD_BARRIER_T];
<
long int __align;
<
} pthread_barrier_t;
<
typedef union
|
#undef __STD_TYPE
{
<
char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
<
int __align;
<
} pthread_barrierattr_t;
<
#endif
<
<
<
#if __WORDSIZE == 32
<
/* Extra attributes for the cleanup functions. */
<
# define __cleanup_fct_attribute __attribute__ ((__regparm__ <
#endif
<
#endif
/* bits/pthreadtypes.h */
|
#endif /* bits/types.h */
[root@localhost diff]#
这种并排格式的对比一目了然,可以快速找到不同的地方。
-W选择可以指定输出列的宽度,这里指定输出列宽为130
3、上下文输出格式
[root@localhost diff]# diff hello.c hello_diff.c
-c
*** hello.c 2007-09-25 17:54:51.000000000 +0800
--- hello_diff.c 2007-09-25 17:56:00.000000000 +0800
***************
*** 1,11 ****
#include <stdio.h>
int main(void)
{
! char msg[] = "Hello world!";
puts(msg);
! printf("Welcome to use diff commond./n");
return 0;
}
--- 1,12 ----
#include <stdio.h>
+ #include <stdlib.h>
int main(void)
{
! char msg[] = "Hello world,fome hello_diff.c";
puts(msg);
! printf("hello_diff.c says,'Here you are,using diff.'/n");
return 0;
}
[root@localhost diff]#
这种方式在开头两行作了比较文件的说明,这里有三中特殊字符:
+ 比较的文件的后者比前着多一行
- 比较的文件的后者比前着少一行
! 比较的文件两者有差别的行
===================
我运行的结果:
*** pthreadtypes.h
2010-11-18 00:22:21.000000000 +0800
--- types.h
2010-11-18 00:22:21.000000000 +0800
***************
*** 1,6 ****
! /* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
--- 1,6 ----
! /* bits/types.h -- definitions of __*_t types underlying *_t types.
! Copyright (C) 2002, 2003, 2004, 2005, 2007 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
***************
*** 17,225 ****
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
! #ifndef _BITS_PTHREADTYPES_H
! #define _BITS_PTHREADTYPES_H
1
#include <bits/wordsize.h>
#if __WORDSIZE == 64
! # define __SIZEOF_PTHREAD_ATTR_T 56
! # define __SIZEOF_PTHREAD_MUTEX_T 40
! # define __SIZEOF_PTHREAD_MUTEXATTR_T 4
! # define __SIZEOF_PTHREAD_COND_T 48
! # define __SIZEOF_PTHREAD_CONDATTR_T 4
! # define __SIZEOF_PTHREAD_RWLOCK_T 56
! # define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
! # define __SIZEOF_PTHREAD_BARRIER_T 32
! # define __SIZEOF_PTHREAD_BARRIERATTR_T 4
! #else
! # define __SIZEOF_PTHREAD_ATTR_T 36
! # define __SIZEOF_PTHREAD_MUTEX_T 24
! # define __SIZEOF_PTHREAD_MUTEXATTR_T 4
! # define __SIZEOF_PTHREAD_COND_T 48
! # define __SIZEOF_PTHREAD_CONDATTR_T 4
! # define __SIZEOF_PTHREAD_RWLOCK_T 32
! # define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
! # define __SIZEOF_PTHREAD_BARRIER_T 20
! # define __SIZEOF_PTHREAD_BARRIERATTR_T 4
#endif
!
! /* Thread identifiers. The structure of the attribute type is not
! exposed on purpose. */
! typedef unsigned long int pthread_t;
!
!
! typedef union
! {
! char __size[__SIZEOF_PTHREAD_ATTR_T];
! long int __align;
! } pthread_attr_t;
!
!
#if __WORDSIZE == 64
! typedef struct __pthread_internal_list
! {
! struct __pthread_internal_list *__prev;
! struct __pthread_internal_list *__next;
! } __pthread_list_t;
#else
! typedef struct __pthread_internal_slist
{
! struct __pthread_internal_slist *__next;
! } __pthread_slist_t;
#endif
! /* Data structures for mutex handling. The structure of the attribute
! type is not exposed on purpose. */
! typedef union
! {
! struct __pthread_mutex_s
! {
! int __lock;
! unsigned int __count;
! int __owner;
! #if __WORDSIZE == 64
! unsigned int __nusers;
! #endif
! /* KIND must stay at this position in the structure to maintain
! binary compatibility. */
! int __kind;
! #if __WORDSIZE == 64
! int __spins;
! __pthread_list_t __list;
! # define __PTHREAD_MUTEX_HAVE_PREV
1
#else
! unsigned int __nusers;
! __extension__ union
! {
! int __spins;
! __pthread_slist_t __list;
! };
#endif
! } __data;
! char __size[__SIZEOF_PTHREAD_MUTEX_T];
! long int __align;
! } pthread_mutex_t;
- typedef union
- {
- char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
- int __align;
- } pthread_mutexattr_t;
! /* Data structure for conditional variable handling. The structure of
! the attribute type is not exposed on purpose. */
! typedef union
! {
! struct
! {
! int __lock;
! unsigned int __futex;
! __extension__ unsigned long long int __total_seq;
! __extension__ unsigned long long int __wakeup_seq;
! __extension__ unsigned long long int __woken_seq;
! void *__mutex;
! unsigned int __nwaiters;
! unsigned int __broadcast_seq;
! } __data;
! char __size[__SIZEOF_PTHREAD_COND_T];
! __extension__ long long int __align;
! } pthread_cond_t;
! typedef union
! {
! char __size[__SIZEOF_PTHREAD_CONDATTR_T];
! int __align;
! } pthread_condattr_t;
! /* Keys for thread-specific data */
! typedef unsigned int pthread_key_t;
! /* Once-only execution */
! typedef int pthread_once_t;
! #if defined __USE_UNIX98 || defined __USE_XOPEN2K
! /* Data structure for read-write lock variable handling. The
! structure of the attribute type is not exposed on purpose. */
! typedef union
! {
! # if __WORDSIZE == 64
! struct
! {
! int __lock;
! unsigned int __nr_readers;
! unsigned int __readers_wakeup;
! unsigned int __writer_wakeup;
! unsigned int __nr_readers_queued;
! unsigned int __nr_writers_queued;
! int __writer;
! int __shared;
! unsigned long int __pad1;
! unsigned long int __pad2;
! /* FLAGS must stay at this position in the structure to maintain
! binary compatibility. */
! unsigned int __flags;
! } __data;
! # else
! struct
! {
! int __lock;
! unsigned int __nr_readers;
! unsigned int __readers_wakeup;
! unsigned int __writer_wakeup;
! unsigned int __nr_readers_queued;
! unsigned int __nr_writers_queued;
! /* FLAGS must stay at this position in the structure to maintain
! binary compatibility. */
! unsigned char __flags;
! unsigned char __shared;
! unsigned char __pad1;
! unsigned char __pad2;
! int __writer;
! } __data;
! # endif
! char __size[__SIZEOF_PTHREAD_RWLOCK_T];
! long int __align;
! } pthread_rwlock_t;
! typedef union
! {
! char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
! long int __align;
! } pthread_rwlockattr_t;
! #endif
! #ifdef __USE_XOPEN2K
! /* POSIX spinlock data type. */
! typedef volatile int pthread_spinlock_t;
- /* POSIX barriers data type. The structure of the type is
- deliberately not exposed. */
- typedef union
- {
- char __size[__SIZEOF_PTHREAD_BARRIER_T];
- long int __align;
- } pthread_barrier_t;
! typedef union
! {
! char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
! int __align;
! } pthread_barrierattr_t;
! #endif
!
!
! #if __WORDSIZE == 32
! /* Extra attributes for the cleanup functions. */
! # define __cleanup_fct_attribute __attribute__ ((__regparm__ (1)))
! #endif
! #endif
/* bits/pthreadtypes.h */
--- 17,197 ----
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
! /*
! * Never include this file directly; use <sys/types.h> instead.
! */
+ #ifndef
_BITS_TYPES_H
+ #define
_BITS_TYPES_H
1
+
+ #include <features.h>
#include <bits/wordsize.h>
+ /* Convenience types. */
+ typedef unsigned char __u_char;
+ typedef unsigned short int __u_short;
+ typedef unsigned int __u_int;
+ typedef unsigned long int __u_long;
+
+ /* Fixed-size types, underlying types depend on word size and compiler. */
+ typedef signed char __int8_t;
+ typedef unsigned char __uint8_t;
+ typedef signed short int __int16_t;
+ typedef unsigned short int __uint16_t;
+ typedef signed int __int32_t;
+ typedef unsigned int __uint32_t;
#if __WORDSIZE == 64
! typedef signed long int __int64_t;
! typedef unsigned long int __uint64_t;
! #elif defined __GLIBC_HAVE_LONG_LONG
! __extension__ typedef signed long long int __int64_t;
! __extension__ typedef unsigned long long int __uint64_t;
#endif
! /* quad_t is also 64 bits. */
#if __WORDSIZE == 64
! typedef long int __quad_t;
! typedef unsigned long int __u_quad_t;
! #elif defined __GLIBC_HAVE_LONG_LONG
! __extension__ typedef long long int __quad_t;
! __extension__ typedef unsigned long long int __u_quad_t;
#else
! typedef struct
{
! long __val[2];
! } __quad_t;
! typedef struct
! {
! __u_long __val[2];
! } __u_quad_t;
#endif
! /* The machine-dependent file <bits/typesizes.h> defines __*_T_TYPE
! macros for each of the OS types we define below. The definitions
! of those macros must use the following macros for underlying types.
! We define __S<SIZE>_TYPE and __U<SIZE>_TYPE for the signed and unsigned
! variants of each of the following integer types on this machine.
!
!
16
-- "natural" 16-bit type (always short)
!
32
-- "natural" 32-bit type (always int)
!
64
-- "natural" 64-bit type (long or long long)
!
LONG32
-- 32-bit type, traditionally long
!
QUAD
-- 64-bit type, always long long
!
WORD
-- natural type of __WORDSIZE bits (int or long)
!
LONGWORD
-- type of __WORDSIZE bits, traditionally long
!
! We distinguish WORD/LONGWORD, 32/LONG32, and 64/QUAD so that the
! conventional uses of `long' or `long long' type modifiers match the
! types we define, even when a less-adorned type would be the same size.
! This matters for (somewhat) portably writing printf/scanf formats for
! these types, where using the appropriate l or ll format modifiers can
! make the typedefs and the formats match up across all GNU platforms. If
! we used `long' when it's 64 bits where `long long' is expected, then the
! compiler would warn about the formats not matching the argument types,
! and the programmer changing them to shut up the compiler would break the
! program's portability.
!
! Here we assume what is presently the case in all the GCC configurations
! we support: long long is always 64 bits, long is always word/address size,
! and int is always 32 bits. */
!
! #define
__S16_TYPE
short int
! #define __U16_TYPE
unsigned short int
! #define
__S32_TYPE
int
! #define __U32_TYPE
unsigned int
! #define __SLONGWORD_TYPE
long int
! #define __ULONGWORD_TYPE
unsigned long int
! #if __WORDSIZE == 32
! # define __SQUAD_TYPE
__quad_t
! # define __UQUAD_TYPE
__u_quad_t
! # define __SWORD_TYPE
int
! # define __UWORD_TYPE
unsigned int
! # define __SLONG32_TYPE
long int
! # define __ULONG32_TYPE
unsigned long int
! # define __S64_TYPE
__quad_t
! # define __U64_TYPE
__u_quad_t
! /* We want __extension__ before typedef's that use nonstandard base types
! such as `long long' in C89 mode. */
! # define __STD_TYPE
__extension__ typedef
! #elif __WORDSIZE == 64
! # define __SQUAD_TYPE
long int
! # define __UQUAD_TYPE
unsigned long int
! # define __SWORD_TYPE
long int
! # define __UWORD_TYPE
unsigned long int
! # define __SLONG32_TYPE
int
! # define __ULONG32_TYPE
unsigned int
! # define __S64_TYPE
long int
! # define __U64_TYPE
unsigned long int
! /* No need to mark the typedef with __extension__. */
! # define __STD_TYPE
typedef
#else
! # error
#endif
! #include <bits/typesizes.h>
/* Defines __*_T_TYPE macros. */
+ __STD_TYPE __DEV_T_TYPE __dev_t;
/* Type of device numbers. */
+ __STD_TYPE __UID_T_TYPE __uid_t;
/* Type of user identifications. */
+ __STD_TYPE __GID_T_TYPE __gid_t;
/* Type of group identifications. */
+ __STD_TYPE __INO_T_TYPE __ino_t;
/* Type of file serial numbers. */
+ __STD_TYPE __INO64_T_TYPE __ino64_t;
/* Type of file serial numbers (LFS).*/
+ __STD_TYPE __MODE_T_TYPE __mode_t;
/* Type of file attribute bitmasks. */
+ __STD_TYPE __NLINK_T_TYPE __nlink_t;
/* Type of file link counts. */
+ __STD_TYPE __OFF_T_TYPE __off_t;
/* Type of file sizes and offsets. */
+ __STD_TYPE __OFF64_T_TYPE __off64_t;
/* Type of file sizes and offsets (LFS). */
+ __STD_TYPE __PID_T_TYPE __pid_t;
/* Type of process identifications. */
+ __STD_TYPE __FSID_T_TYPE __fsid_t;
/* Type of file system IDs. */
+ __STD_TYPE __CLOCK_T_TYPE __clock_t;
/* Type of CPU usage counts. */
+ __STD_TYPE __RLIM_T_TYPE __rlim_t;
/* Type for resource measurement. */
+ __STD_TYPE __RLIM64_T_TYPE __rlim64_t;
/* Type for resource measurement (LFS). */
+ __STD_TYPE __ID_T_TYPE __id_t;
/* General type for IDs. */
+ __STD_TYPE __TIME_T_TYPE __time_t;
/* Seconds since the Epoch. */
+ __STD_TYPE __USECONDS_T_TYPE __useconds_t; /* Count of microseconds. */
+ __STD_TYPE __SUSECONDS_T_TYPE __suseconds_t; /* Signed count of microseconds. */
! __STD_TYPE __DADDR_T_TYPE __daddr_t;
/* The type of a disk address. */
! __STD_TYPE __SWBLK_T_TYPE __swblk_t;
/* Type of a swap block maybe? */
! __STD_TYPE __KEY_T_TYPE __key_t;
/* Type of an IPC key. */
! /* Clock ID used in clock and timer functions. */
! __STD_TYPE __CLOCKID_T_TYPE __clockid_t;
+ /* Timer ID returned by `timer_create'. */
+ __STD_TYPE __TIMER_T_TYPE __timer_t;
! /* Type to represent block size. */
! __STD_TYPE __BLKSIZE_T_TYPE __blksize_t;
+ /* Types from the Large File Support interface. */
! /* Type to count number of disk blocks. */
! __STD_TYPE __BLKCNT_T_TYPE __blkcnt_t;
! __STD_TYPE __BLKCNT64_T_TYPE __blkcnt64_t;
+ /* Type to count file system blocks. */
+ __STD_TYPE __FSBLKCNT_T_TYPE __fsblkcnt_t;
+ __STD_TYPE __FSBLKCNT64_T_TYPE __fsblkcnt64_t;
! /* Type to count file system nodes. */
! __STD_TYPE __FSFILCNT_T_TYPE __fsfilcnt_t;
! __STD_TYPE __FSFILCNT64_T_TYPE __fsfilcnt64_t;
! __STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count, or error. */
+ /* These few don't really vary by system, they always correspond
+ to one of the other defined types. */
+ typedef __off64_t __loff_t;
/* Type of file sizes and offsets (LFS). */
+ typedef __quad_t *__qaddr_t;
+ typedef char *__caddr_t;
! /* Duplicates info from stdint.h but this is used in unistd.h. */
! __STD_TYPE __SWORD_TYPE __intptr_t;
+ /* Duplicate info from sys/socket.h. */
+ __STD_TYPE __U32_TYPE __socklen_t;
! #undef __STD_TYPE
! #endif /* bits/types.h */
=======================
4、统一输出格式
[root@localhost diff]# diff hello.c hello_diff.c
-u
--- hello.c 2007-09-25 17:54:51.000000000 +0800
+++ hello_diff.c 2007-09-25 17:56:00.000000000 +0800
@@ -1,11 +1,12 @@
#include <stdio.h>
+#include <stdlib.h>
int main(void)
{
- char msg[] = "Hello world!";
+ char msg[] = "Hello world,fome hello_diff.c";
puts(msg);
- printf("Welcome to use diff commond./n");
+ printf("hello_diff.c says,'Here you are,using diff.'/n");
return 0;
}
[root@localhost diff]#
正如看到的那样,统一格式的输出更加紧凑,所以更易于理解,更易于修改。
===============
我输出的结果:
--- pthreadtypes.h 2010-11-18 00:22:21.000000000 +0800
+++ types.h 2010-11-18 00:22:21.000000000 +0800
@@ -1,6 +1,6 @@
-/* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
+/* bits/types.h -- definitions of __*_t types underlying *_t types.
+ Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -17,209 +17,181 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#ifndef _BITS_PTHREADTYPES_H
-#define _BITS_PTHREADTYPES_H 1
+/*
+ * Never include this file directly; use <sys/types.h> instead.
+ */
+#ifndef _BITS_TYPES_H
+#define _BITS_TYPES_H 1
+
+#include <features.h>
#include <bits/wordsize.h>
+/* Convenience types. */
+typedef unsigned char __u_char;
+typedef unsigned short int __u_short;
+typedef unsigned int __u_int;
+typedef unsigned long int __u_long;
+
+/* Fixed-size types, underlying types depend on word size and compiler. */
+typedef signed char __int8_t;
+typedef unsigned char __uint8_t;
+typedef signed short int __int16_t;
+typedef unsigned short int __uint16_t;
+typedef signed int __int32_t;
+typedef unsigned int __uint32_t;
#if __WORDSIZE == 64
-# define __SIZEOF_PTHREAD_ATTR_T 56
-# define __SIZEOF_PTHREAD_MUTEX_T 40
-# define __SIZEOF_PTHREAD_MUTEXATTR_T 4
-# define __SIZEOF_PTHREAD_COND_T 48
-# define __SIZEOF_PTHREAD_CONDATTR_T 4
-# define __SIZEOF_PTHREAD_RWLOCK_T 56
-# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
-# define __SIZEOF_PTHREAD_BARRIER_T 32
-# define __SIZEOF_PTHREAD_BARRIERATTR_T 4
-#else
-# define __SIZEOF_PTHREAD_ATTR_T 36
-# define __SIZEOF_PTHREAD_MUTEX_T 24
-# define __SIZEOF_PTHREAD_MUTEXATTR_T 4
-# define __SIZEOF_PTHREAD_COND_T 48
-# define __SIZEOF_PTHREAD_CONDATTR_T 4
-# define __SIZEOF_PTHREAD_RWLOCK_T 32
-# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
-# define __SIZEOF_PTHREAD_BARRIER_T 20
-# define __SIZEOF_PTHREAD_BARRIERATTR_T 4
+typedef signed long int __int64_t;
+typedef unsigned long int __uint64_t;
+#elif defined __GLIBC_HAVE_LONG_LONG
+__extension__ typedef signed long long int __int64_t;
+__extension__ typedef unsigned long long int __uint64_t;
#endif
-
-/* Thread identifiers. The structure of the attribute type is not
- exposed on purpose. */
-typedef unsigned long int pthread_t;
-
-
-typedef union
-{
- char __size[__SIZEOF_PTHREAD_ATTR_T];
- long int __align;
-} pthread_attr_t;
-
-
+/* quad_t is also 64 bits. */
#if __WORDSIZE == 64
-typedef struct __pthread_internal_list
-{
- struct __pthread_internal_list *__prev;
- struct __pthread_internal_list *__next;
-} __pthread_list_t;
+typedef long int __quad_t;
+typedef unsigned long int __u_quad_t;
+#elif defined __GLIBC_HAVE_LONG_LONG
+__extension__ typedef long long int __quad_t;
+__extension__ typedef unsigned long long int __u_quad_t;
#else
-typedef struct __pthread_internal_slist
+typedef struct
{
- struct __pthread_internal_slist *__next;
-} __pthread_slist_t;
+ long __val[2];
+} __quad_t;
+typedef struct
+{
+ __u_long __val[2];
+} __u_quad_t;
#endif
-/* Data structures for mutex handling. The structure of the attribute
- type is not exposed on purpose. */
-typedef union
-{
- struct __pthread_mutex_s
- {
- int __lock;
- unsigned int __count;
- int __owner;
-#if __WORDSIZE == 64
- unsigned int __nusers;
-#endif
- /* KIND must stay at this position in the structure to maintain
- binary compatibility. */
- int __kind;
-#if __WORDSIZE == 64
- int __spins;
- __pthread_list_t __list;
-# define __PTHREAD_MUTEX_HAVE_PREV 1
+/* The machine-dependent file <bits/typesizes.h> defines __*_T_TYPE
+ macros for each of the OS types we define below. The definitions
+ of those macros must use the following macros for underlying types.
+ We define __S<SIZE>_TYPE and __U<SIZE>_TYPE for the signed and unsigned
+ variants of each of the following integer types on this machine.
+
+ 16 -- "natural" 16-bit type (always short)
+ 32 -- "natural" 32-bit type (always int)
+ 64 -- "natural" 64-bit type (long or long long)
+ LONG32 -- 32-bit type, traditionally long
+ QUAD -- 64-bit type, always long long
+ WORD -- natural type of __WORDSIZE bits (int or long)
+ LONGWORD -- type of __WORDSIZE bits, traditionally long
+
+ We distinguish WORD/LONGWORD, 32/LONG32, and 64/QUAD so that the
+ conventional uses of `long' or `long long' type modifiers match the
+ types we define, even when a less-adorned type would be the same size.
+ This matters for (somewhat) portably writing printf/scanf formats for
+ these types, where using the appropriate l or ll format modifiers can
+ make the typedefs and the formats match up across all GNU platforms. If
+ we used `long' when it's 64 bits where `long long' is expected, then the
+ compiler would warn about the formats not matching the argument types,
+ and the programmer changing them to shut up the compiler would break the
+ program's portability.
+
+ Here we assume what is presently the case in all the GCC configurations
+ we support: long long is always 64 bits, long is always word/address size,
+ and int is always 32 bits. */
+
+#define __S16_TYPE short int
+#define __U16_TYPE unsigned short int
+#define __S32_TYPE int
+#define __U32_TYPE unsigned int
+#define __SLONGWORD_TYPE long int
+#define __ULONGWORD_TYPE unsigned long int
+#if __WORDSIZE == 32
+# define __SQUAD_TYPE __quad_t
+# define __UQUAD_TYPE __u_quad_t
+# define __SWORD_TYPE int
+# define __UWORD_TYPE unsigned int
+# define __SLONG32_TYPE long int
+# define __ULONG32_TYPE unsigned long int
+# define __S64_TYPE __quad_t
+# define __U64_TYPE __u_quad_t
+/* We want __extension__ before typedef's that use nonstandard base types
+ such as `long long' in C89 mode. */
+# define __STD_TYPE __extension__ typedef
+#elif __WORDSIZE == 64
+# define __SQUAD_TYPE long int
+# define __UQUAD_TYPE unsigned long int
+# define __SWORD_TYPE long int
+# define __UWORD_TYPE unsigned long int
+# define __SLONG32_TYPE int
+# define __ULONG32_TYPE unsigned int
+# define __S64_TYPE long int
+# define __U64_TYPE unsigned long int
+/* No need to mark the typedef with __extension__. */
+# define __STD_TYPE typedef
#else
- unsigned int __nusers;
- __extension__ union
- {
- int __spins;
- __pthread_slist_t __list;
- };
+# error
#endif
- } __data;
- char __size[__SIZEOF_PTHREAD_MUTEX_T];
- long int __align;
-} pthread_mutex_t;
+#include <bits/typesizes.h> /* Defines __*_T_TYPE macros. */
-typedef union
-{
- char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
- int __align;
-} pthread_mutexattr_t;
+__STD_TYPE __DEV_T_TYPE __dev_t; /* Type of device numbers. */
+__STD_TYPE __UID_T_TYPE __uid_t; /* Type of user identifications. */
+__STD_TYPE __GID_T_TYPE __gid_t; /* Type of group identifications. */
+__STD_TYPE __INO_T_TYPE __ino_t; /* Type of file serial numbers. */
+__STD_TYPE __INO64_T_TYPE __ino64_t; /* Type of file serial numbers (LFS).*/
+__STD_TYPE __MODE_T_TYPE __mode_t; /* Type of file attribute bitmasks. */
+__STD_TYPE __NLINK_T_TYPE __nlink_t; /* Type of file link counts. */
+__STD_TYPE __OFF_T_TYPE __off_t; /* Type of file sizes and offsets. */
+__STD_TYPE __OFF64_T_TYPE __off64_t; /* Type of file sizes and offsets (LFS). */
+__STD_TYPE __PID_T_TYPE __pid_t; /* Type of process identifications. */
+__STD_TYPE __FSID_T_TYPE __fsid_t; /* Type of file system IDs. */
+__STD_TYPE __CLOCK_T_TYPE __clock_t; /* Type of CPU usage counts. */
+__STD_TYPE __RLIM_T_TYPE __rlim_t; /* Type for resource measurement. */
+__STD_TYPE __RLIM64_T_TYPE __rlim64_t; /* Type for resource measurement (LFS). */
+__STD_TYPE __ID_T_TYPE __id_t; /* General type for IDs. */
+__STD_TYPE __TIME_T_TYPE __time_t; /* Seconds since the Epoch. */
+__STD_TYPE __USECONDS_T_TYPE __useconds_t; /* Count of microseconds. */
+__STD_TYPE __SUSECONDS_T_TYPE __suseconds_t; /* Signed count of microseconds. */
-/* Data structure for conditional variable handling. The structure of
- the attribute type is not exposed on purpose. */
-typedef union
-{
- struct
- {
- int __lock;
- unsigned int __futex;
- __extension__ unsigned long long int __total_seq;
- __extension__ unsigned long long int __wakeup_seq;
- __extension__ unsigned long long int __woken_seq;
- void *__mutex;
- unsigned int __nwaiters;
- unsigned int __broadcast_seq;
- } __data;
- char __size[__SIZEOF_PTHREAD_COND_T];
- __extension__ long long int __align;
-} pthread_cond_t;
+__STD_TYPE __DADDR_T_TYPE __daddr_t; /* The type of a disk address. */
+__STD_TYPE __SWBLK_T_TYPE __swblk_t; /* Type of a swap block maybe? */
+__STD_TYPE __KEY_T_TYPE __key_t; /* Type of an IPC key. */
-typedef union
-{
- char __size[__SIZEOF_PTHREAD_CONDATTR_T];
- int __align;
-} pthread_condattr_t;
+/* Clock ID used in clock and timer functions. */
+__STD_TYPE __CLOCKID_T_TYPE __clockid_t;
+/* Timer ID returned by `timer_create'. */
+__STD_TYPE __TIMER_T_TYPE __timer_t;
-/* Keys for thread-specific data */
-typedef unsigned int pthread_key_t;
+/* Type to represent block size. */
+__STD_TYPE __BLKSIZE_T_TYPE __blksize_t;
+/* Types from the Large File Support interface. */
-/* Once-only execution */
-typedef int pthread_once_t;
+/* Type to count number of disk blocks. */
+__STD_TYPE __BLKCNT_T_TYPE __blkcnt_t;
+__STD_TYPE __BLKCNT64_T_TYPE __blkcnt64_t;
+/* Type to count file system blocks. */
+__STD_TYPE __FSBLKCNT_T_TYPE __fsblkcnt_t;
+__STD_TYPE __FSBLKCNT64_T_TYPE __fsblkcnt64_t;
-#if defined __USE_UNIX98 || defined __USE_XOPEN2K
-/* Data structure for read-write lock variable handling. The
- structure of the attribute type is not exposed on purpose. */
-typedef union
-{
-# if __WORDSIZE == 64
- struct
- {
- int __lock;
- unsigned int __nr_readers;
- unsigned int __readers_wakeup;
- unsigned int __writer_wakeup;
- unsigned int __nr_readers_queued;
- unsigned int __nr_writers_queued;
- int __writer;
- int __shared;
- unsigned long int __pad1;
- unsigned long int __pad2;
- /* FLAGS must stay at this position in the structure to maintain
- binary compatibility. */
- unsigned int __flags;
- } __data;
-# else
- struct
- {
- int __lock;
- unsigned int __nr_readers;
- unsigned int __readers_wakeup;
- unsigned int __writer_wakeup;
- unsigned int __nr_readers_queued;
- unsigned int __nr_writers_queued;
- /* FLAGS must stay at this position in the structure to maintain
- binary compatibility. */
- unsigned char __flags;
- unsigned char __shared;
- unsigned char __pad1;
- unsigned char __pad2;
- int __writer;
- } __data;
-# endif
- char __size[__SIZEOF_PTHREAD_RWLOCK_T];
- long int __align;
-} pthread_rwlock_t;
+/* Type to count file system nodes. */
+__STD_TYPE __FSFILCNT_T_TYPE __fsfilcnt_t;
+__STD_TYPE __FSFILCNT64_T_TYPE __fsfilcnt64_t;
-typedef union
-{
- char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
- long int __align;
-} pthread_rwlockattr_t;
-#endif
+__STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count, or error. */
+/* These few don't really vary by system, they always correspond
+ to one of the other defined types. */
+typedef __off64_t __loff_t; /* Type of file sizes and offsets (LFS). */
+typedef __quad_t *__qaddr_t;
+typedef char *__caddr_t;
-#ifdef __USE_XOPEN2K
-/* POSIX spinlock data type. */
-typedef volatile int pthread_spinlock_t;
+/* Duplicates info from stdint.h but this is used in unistd.h. */
+__STD_TYPE __SWORD_TYPE __intptr_t;
+/* Duplicate info from sys/socket.h. */
+__STD_TYPE __U32_TYPE __socklen_t;
-/* POSIX barriers data type. The structure of the type is
- deliberately not exposed. */
-typedef union
-{
- char __size[__SIZEOF_PTHREAD_BARRIER_T];
- long int __align;
-} pthread_barrier_t;
-typedef union
-{
- char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
- int __align;
-} pthread_barrierattr_t;
-#endif
-
-
-#if __WORDSIZE == 32
-/* Extra attributes for the cleanup functions. */
-# define __cleanup_fct_attribute __attribute__ ((__regparm__ (1)))
-#endif
+#undef __STD_TYPE
-#endif /* bits/pthreadtypes.h */
+#endif /* bits/types.h */
===============
5、其他
假如你想查看两个文件是否不同又不想显示差异之处的话,可以加上-q选项:
[root@localhost diff]# diff hello.c hello_diff.c -q
Files hello.c and hello_diff.c differ
[root@localhost diff]# 另外你还可以提供一些匹配规则来忽略某中差别,可以用 -I regexp
[root@localhost diff]# diff hello.c hello_diff.c -c
-I include
*** hello.c 2007-09-25 17:54:51.000000000 +0800
--- hello_diff.c 2007-09-25 17:56:00.000000000 +0800
***************
*** 2,11 ****
int main(void)
{
! char msg[] = "Hello world!";
puts(msg);
! printf("Welcome to use diff commond./n");
return 0;
}
--- 3,12 ----
int main(void)
{
! char msg[] = "Hello world,fome hello_diff.c";
puts(msg);
! printf("hello_diff.c says,'Here you are,using diff.'/n");
return 0;
}
[root@localhost diff]#
这里通过“ -I include”选项来忽略带有“ include”字样的行