STDIO
#include <stdio.h>
#include <unistd.h>
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;
}
标准输出连接到终端设备(交互方式)是行缓冲,否则是全缓冲。
文件读写标志
文件属性 Struct
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函数族
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重定向 。