#include#include int main(){ int n; char buf[1024]; n = read(STDIN_FILENO, buf, 1024); //printf("%d %s\n", n, buf); write(STDOUT_FILENO, buf, n); return 0; }
标准输出连接到终端设备(交互方式)是行缓冲,否则是全缓冲。
27 struct stat 28 { 29 dev_t st_dev; //文件的设备编号 30 ino_t st_ino; //节点 31 mode_t st_mode; 32 nlink_t st_nlink; 33 uid_t st_uid; 34 gid_t st_gid; 35 dev_t st_rdev; 36 off_t st_size; //文件字节数(文件大小) 37 #if defined(__rtems__) 38 struct timespec st_atim; 39 struct timespec st_mtim; 40 struct timespec st_ctim; 41 blksize_t st_blksize; 42 blkcnt_t st_blocks; 43 #else 44 /* SysV/sco doesn't have the rest... But Solaris, eabi does. */ 45 #if defined(__svr4__) && !defined(__PPC__) && !defined(__sun__) 46 time_t st_atime; 47 time_t st_mtime; 48 time_t st_ctime; 49 #else 50 time_t st_atime; 51 long st_spare1; 52 time_t st_mtime; 53 long st_spare2; 54 time_t st_ctime; 55 long st_spare3; 56 blksize_t st_blksize; 57 blkcnt_t st_blocks; 58 long st_spare4[2]; 59 #endif 60 #endif 61 };
exec后新进程保持原进程以下特征
环境变量(使用了execle、execve函数则不继承环境变量);
进程ID和父进程ID;
实际用户ID和实际组ID;
附加组ID;
进程组ID;
会话ID;
控制终端;
当前工作目录;
根目录;
文件权限屏蔽字;
文件锁;
进程信号屏蔽;
未决信号;
资源限制;
tms_utime、tms_stime、tms_cutime以及tms_ustime值。
对打开文件的处理与每个描述符的exec关闭标志值有关,进程中每个文件描述符有一个exec关闭标志(FD_CLOEXEC),若此标志设置,则在执行exec时关闭该描述符,否则该描述符仍打开。除非特地用fcntl设置了该标志,否则系统的默认操作是在exec后仍保持这种描述符打开,利用这一点 可以实现I/O重定向 。