1.IPC相關應用與解釋
指至少兩個行程(process)或緒程(thread)間傳送資料或訊號的一些技術或方法。緒程是電腦系統分配資源的最小單位。每個行程都有自己的一部分獨立的系統資源,彼此是隔離的。為了能使不同的行程互相存取資源並進行協調工作,才有了行程間通訊。這些行程可以執行在同一電腦上或網路連線的不同電腦上。
例:synchronization, message passing, shared memory, memory-mapped files, pipe, socket…etc。
優:資訊共享、加速、模組化、方便以及私有權分離
2.program counter 在電腦中應用在哪
又被稱為指令指標(Instruction Pointer),是在電腦處理器(cpu)中的一個暫存器(register),用來指示電腦正在執行的指令序列。依照特定機器的細節而不同,他可能是 保存著正在被執行的指令,也可能是下一個要執行指令的地址。程式計數器在每個指令週期會自動地增加,所以指令會正常地從暫存器中連續地被取出。某些指令, 像是跳躍和子程序呼叫,會中斷程序執行的序列,將新的數值內容存放到程序計數器中。
在大部分的處理器,指令指標都是在提取程式指令後就被立即增加;也就是說跳躍指令的目的位址,是由跳躍指令的運算元加上跳躍指令之後下一個指令的位址 (位元或位元組,是電腦形態而定) 來獲得目的地。
應用:遠端連線
3.找一個Socket programming 然後對這支程式內容做解釋
server 程式:
#include<winsock2.h>
#include<stdio.h>
int main() {
SOCKET server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
// 註冊 Winsock DLL
WSADATA wsadata;
if(WSAStartup(0x101,(LPWSADATA)&wsadata) != 0) {
printf("Winsock Error\n");
exit(1);
}
// 產生 server socket
server_sockfd = socket(AF_INET, SOCK_STREAM, 0); // AF_INET(使用IPv4); SOCK_STREAM; 0(使用預設通訊協定,即TCP)
if(server_sockfd == SOCKET_ERROR) {
printf("Socket Error\n");
exit(1);
}
// struct sockaddr_in {
// short int sin_family; /* AF_INT(使用IPv4) */
// unsigned short int sin_port; /* Port(埠號) */
// struct in_addr sin_addr; /* IP位址 */
// };
// sturct in_addr {
// unsigned long int s_addr;
// };
server_address.sin_family = AF_INET; // AF_INT(使用IPv4)
server_address.sin_addr.s_addr = inet_addr("127.0.0.1"); // 設定IP位址
server_address.sin_port = 9734; //設定埠號
server_len = sizeof(server_address);
if(bind(server_sockfd, (struct sockaddr *)&server_address, server_len) < 0) {
printf("Bind Error\n");
exit(1);
}
if(listen(server_sockfd, 5) < 0) {
printf("Listen Error\n");
exit(1);
}
while(1) {
char ch;
printf("Server waiting...\n");
client_len = sizeof(client_address);
client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);
if(client_sockfd == SOCKET_ERROR) {
printf("Accept Error\n");
exit(1);
}
recv(client_sockfd, &ch, 1, 0); // Linux socket programming 為 read
ch++;
send(client_sockfd, &ch, 1, 0); // Linux socket programming 為 write
closesocket(client_sockfd); // Linux socket programming 為 close
}
}
client 程式
#include<winsock2.h>
#include<stdio.h>
int main() {
SOCKET sockfd;
int len;
struct sockaddr_in address;
int result;
char ch = 'A';
WSADATA wsadata;
if(WSAStartup(0x101,(LPWSADATA)&wsadata) != 0) {
printf("Winsock Error\n");
exit(1);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = 9734;
len = sizeof(address);
result = connect(sockfd, (struct sockaddr *)&address, len);
if(result == -1) {
printf("Connetc Error");
exit(1);
}
send(sockfd, &ch, 1, 0);
recv(sockfd, &ch, 1, 0);
printf("char from server = %c\n", ch);
closesocket(sockfd);
exit(0);
}