Jithamanyu404/Road-Incident-Reporting-System
GitHub: Jithamanyu404/Road-Incident-Reporting-System
一个基于 C 语言和 POSIX 原语实现的多用户实时道路事件报告系统,作为操作系统课程实验项目演示并发控制、文件锁定、Socket 编程和进程间通信等核心概念。
Stars: 0 | Forks: 0
# 实时协作交通与道路事件报告系统
## EGC 301P 操作系统实验 — 迷你项目
## 项目概述
这是一个多用户、多进程的网络应用程序,交通警察、通勤者和城市控制室可以在此系统中实时协调道路事件的报告和响应。
## 已实现的 OS 概念
| 概念 | 位置 | 机制 |
|---------|-------|-----------|
| 4.1 基于角色的身份验证 | server/auth.c | 3 种角色:control_room、officer、commuter |
| 4.2 文件锁定 | server/file_manager.c | fcntl F_WRLCK / F_RDLCK |
| 4.3 并发控制 | server/incident.c | pthread_mutex + POSIX semaphore |
| 4.4 数据一致性 | server/incident.c | 原子检查+写入,状态机 |
| 4.5 Socket 编程 | server/main.c + clients | TCP 客户端-服务端,每个客户端一个线程 |
| 4.6 IPC | server/ipc_pipe.c + analytics/ | 命名管道 (FIFO) |
## 文件结构
```
traffic_system/
├── common.h # Shared types, constants, protocol
├── Makefile
│
├── server/
│ ├── main.c # TCP server, thread spawning
│ ├── auth.c / auth.h # Role-based authentication
│ ├── incident.c / .h # Registry with mutex + semaphore
│ ├── file_manager.c / .h # fcntl file locking
│ └── ipc_pipe.c / .h # Named pipe writer
│
├── client/
│ ├── commuter_client.c # Commuter terminal
│ ├── officer_client.c # Officer terminal
│ └── control_client.c # Control room terminal
│
├── analytics/
│ └── analytics.c # Separate process — named pipe reader
│
└── data/ # Auto-created on first run
├── users.txt
└── zone_N_incidents.log
```
## 构建
```
cd traffic_system
make all
```
依赖要求:gcc,Linux (fcntl + POSIX threads + named pipes)
## 运行系统
在 traffic_system 目录下打开 **5 个终端**:
**终端 1 — Analytics(首先启动!)**
```
./analytics/analytics
```
**终端 2 — 服务端**
```
./server/server
```
**终端 3 — 通勤者**
```
./client/commuter_client
# 登录: ravi / ravi123
```
**终端 4 — 警官**
```
./client/officer_client
# 登录: officer1 / pass1 (Zone 1)
```
**终端 5 — 控制室**
```
./client/control_client
# 登录: admin / admin123
```
## 默认用户账户
| 用户名 | 密码 | 角色 | 区域 |
|----------|----------|------|------|
| admin | admin123 | control_room | all |
| officer1 | pass1 | officer | 1 |
| officer2 | pass2 | officer | 2 |
| officer3 | pass3 | officer | 3 |
| ravi | ravi123 | commuter | any |
| priya | priya123 | commuter | any |
| arjun | arjun123 | commuter | any |
## 演示脚本(用于评估)
```
1. [Commuter Terminal]
REPORT 1 Accident near MG Road signal
→ Server: OK Incident #1 created in zone 1
2. [Officer1 Terminal — zone 1]
LIST
→ Shows Incident #1 as PENDING
CLAIM 1
→ Server: OK Incident claimed successfully
3. [Commuter Terminal — try to claim same incident]
(Cannot — DENIED: commuter role has no CLAIM permission)
4. [Officer1 Terminal]
UPDATE 1 INVESTIGATING
UPDATE 1 RESOLVED
5. [Control Room Terminal]
LISTALL
→ Shows all zones
REPORT 2 Pothole on Hosur Road
CLOSE 2
→ Force-closes from control room
6. [Analytics Terminal]
→ Live dashboard updates with each event
→ Shows per-zone statistics in real time
7. RACE CONDITION DEMO:
Open two officer terminals (officer1 and officer2 — same zone workaround)
Both try: CLAIM 1 simultaneously
→ Only one succeeds. Other gets: "FAIL Incident already claimed"
→ Demonstrates mutex protecting against double-claim race condition
```
标签:Socket编程, 交通事件上报系统, 客户端加密, 并发控制, 操作系统实验, 文件锁, 进程间通信