..
Network Programming 2014-09-25
2014/09/25 Network Programming Class Note
Memory
User Context
+----------------+
| stack
+----------------+
|
+----------------+
| heap
+----------------+
| uninitialized data
+----------------+
| initialized
| read-write
| data
+----------------+
|
+----------------+
|
+----------------+
|
+----------------+
Arguments
- argv’s last element “points” to null (?)
- envp
Users and Groups
Effective User ID
- elevate privilege temporarily
seteuid()
, e.g./usr/bin/passwd
System Call
- system call: trap
- library function: pointer
- 無法 set break point at system call (?)
- Use system call frequently may cause performance of the program degrade significantly, unlike library function call
File Model in Unix
- discriptor table: one per process
Process
FD Table
+---------+
| stdin | -------> +---------+
+---------+ | console |
| stdout | +---------+
+---------+
| stderr |
+---------+
| file... | -------> +-----------+ -------> +------+
+---------+ | file | | file |
| file... | | internal | +------+
+---------+ | structure |
| ... | +-----------+
+---------+
- File internal structure 包含檔案讀到哪裡的 pointer, etc.
- start over
Signal Model
kill(int pid, int sig)
: conceptually is “signal” we learnedsignal(int sig,, void (*func)(int))
: setting signal handler
Being Interrupt while Handling a Signal
Old
| ^ ^
| /| /|
|/ v/ |
|\ |
| \ v
| \ |
| \_|
|
v
New: concatenate
Pause
- The
sigblock()
andsigsetmask()
functions return the previous set of masked signals - sigpause()
Fork
Child process has
- A new pid
- A different parent pid
- A copy of parent’s FD table
- does not copy file internal structure
- 若 parent 有 read file,child 會接著目前 pointer 讀下去
- Solution: close file, only one open left
fork()
return value- child: 0
- parent: child’s pid
- error: -1