1.
Define a data structure of type 'book' containing the info 'book name', 'author', 'pages' &
'price'. Write a program to read & display these data using pointer.
#include <stdio.h>
#include <stdlib.h>
struct Book {
char name[100];
char author[100];
int pages;
float price;
};
int main() {
struct Book *ptr;
ptr = (struct Book *)malloc(sizeof(struct Book));
if (ptr == NULL) {
printf("Memory allocation failed. Exiting program.\n");
return 1;
printf("Enter book name: ");
scanf("%s", ptr->name);
printf("Enter author name: ");
scanf("%s", ptr->author);
printf("Enter number of pages: ");
scanf("%d", &ptr->pages);
printf("Enter price: ");
scanf("%f", &ptr->price);
printf("\nBook Information:\n");
printf("Name: %s\n", ptr->name);
printf("Author: %s\n", ptr->author);
printf("Pages: %d\n", ptr->pages);
printf("Price: $%.2f\n", ptr->price);
free(ptr);
return 0;
2. Write a simple function in 'C' that returns a structure. Demonstrate with an example.
#include <stdio.h>
struct Person {
char name[100];
int age;
};
struct Person createPerson() {
struct Person newPerson;
printf("Enter person's name: ");
scanf("%s", newPerson.name);
printf("Enter person's age: ");
scanf("%d", &newPerson.age);
return newPerson;
int main() {
struct Person myPerson = createPerson();
printf("\nPerson Information:\n");
printf("Name: %s\n", myPerson.name);
printf("Age: %d\n", myPerson.age);
return 0;
3. Write a program to multiply two - 8bit numbers using 8051 or any other microcontroller.
#include <stdio.h>
unsigned char multiply8bit(unsigned char a, unsigned char b) {
return a * b;
}
int main() {
unsigned char num1 = 0x0A;
unsigned char num2 = 0x05;
unsigned char result = multiply8bit(num1, num2);
printf("Result of %d * %d = %d\n", num1, num2, result);
return 0;
4. Write the steps taken after receiving an interrupt in 8051 architecture. Give an example
PROGRAM EXPLANATION
ORG 0x00 ;
START:
MOV TMOD, #01 ;
MOV TH0, #0xFF ;
MOV TL0, #0x00
SETB ET0 ;
SETB EA ;
SETB TR0 ;
MAIN_LOOP:
NOP ;
TIMER0_ISR:
RETI ;
5. Create two threads 'T1' & 'T2'. The thread T1 shall read the data from stdin continuously, the
other thread 'T2' will write the data by 'T1' to a file "output.txt". Develop a program in C to
demonstrate this.
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
struct SharedData {
FILE *file;
pthread_mutex_t mutex;
int stopFlag;
};
void *threadT1(void *arg) {
struct SharedData *sharedData = (struct SharedData *)arg;
char buffer[100];
while (!sharedData->stopFlag) {
printf("Thread T1: Enter data (or type 'exit' to stop): ");
fgets(buffer, sizeof(buffer), stdin);
pthread_mutex_lock(&sharedData->mutex);
fprintf(sharedData->file, "%s", buffer);
pthread_mutex_unlock(&sharedData->mutex);
if (strcmp(buffer, "exit\n") == 0) {
sharedData->stopFlag = 1;
return NULL;
void *threadT2(void *arg) {
struct SharedData *sharedData = (struct SharedData *)arg;
while (!sharedData->stopFlag) {
usleep(100000);
return NULL;
int main() {
FILE *outputFile = fopen("output.txt", "w");
if (outputFile == NULL) {
perror("Error opening file");
return 1;
struct SharedData sharedData;
sharedData.file = outputFile;
sharedData.stopFlag = 0;
pthread_mutex_init(&sharedData.mutex, NULL);
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, threadT1, &sharedData);
pthread_create(&tid2, NULL, threadT2, &sharedData);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
pthread_mutex_destroy(&sharedData.mutex);
fclose(outputFile);
return 0;
6. Write a program to copy the contents of a text file "a.txt" to another file "b.txt" & count the
occurrence of 'the' in the file "a.txt".
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fileA, *fileB;
char ch;
int count = 0;
fileA = fopen("a.txt", "r");
fileB = fopen("b.txt", "w");
if (fileA == NULL || fileB == NULL) {
printf("Error opening files.\n");
exit(1);
while ((ch = fgetc(fileA)) != EOF) {
fputc(ch, fileB);
if (ch == 't') {
ch = fgetc(fileA);
if (ch == 'h') {
ch = fgetc(fileA);
if (ch == 'e') {
count++;
ungetc(ch, fileA);
} else {
ungetc(ch, fileA);
printf("Occurrences of 'the' in a.txt: %d\n", count);
fclose(fileA);
fclose(fileB);
return 0;
7. Write a signal handler in C which prints your name when you press "ctrl+c".
#include <stdio.h>
#include <signal.h>
void signalHandler(int signum) {
printf("\nSignal received. Hello, I'm Anand!\n");
int main() {
signal(SIGINT, signalHandler);
while (1) {
printf("Press Ctrl+C to trigger the signal...\n");
return 0;
}
8. Write a program to demonstrate two processes communicating with each other using shared
memory.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
struct SharedData {
int number;
char message[100];
};
int main() {
int shmid;
key_t key = ftok("shared_memory_example", 65);
shmid = shmget(key, sizeof(struct SharedData), IPC_CREAT | 0666);
if (shmid == -1) {
perror("shmget");
exit(1);
struct SharedData *sharedData = (struct SharedData *)shmat(shmid, NULL, 0);
if ((intptr_t)sharedData == -1) {
perror("shmat");
exit(1);
pid_t pid = fork();
if (pid == -1) {
perror("fork");
exit(1);
} else if (pid == 0) {
printf("Child Process:\n");
printf("Number: %d\n", sharedData->number);
printf("Message: %s\n", sharedData->message);
shmdt(sharedData);
} else {
printf("Parent Process:\n");
sharedData->number = 42;
strcpy(sharedData->message, "Hello from parent!");
wait(NULL);
shmdt(sharedData);
shmctl(shmid, IPC_RMID, NULL);
return 0;
9. Write a program to add a data byte located at offset 0x0500 in 0x2000 usegment to another
data byte at 0x0600 in the same segment & store the result at 0x700 in the same segment
#include <stdio.h>
int main() {
char userSegment[0x2000];
userSegment[0x0500] = 0x0A;
userSegment[0x0600] = 0x05;
userSegment[0x0700] = userSegment[0x0500] + userSegment[0x0600];
printf("Result: %d\n", userSegment[0x0700]);
return 0;
10. Write a program in Assembly for a 16-bit increment without affecting the contents of the
accumulator
section .data
value dw 1234h
section .text
global _start
_start:
mov ax, [value]
inc ax
; AX now contains the incremented value, and the original value is still in [value]
; Additional code or output
; Exit the program
mov eax, 1
xor ebx, ebx
int 0x80
11. Explain the memory layout of 8051 or any microcontroller
8051 Memory Organization - ROM and RAM Structure (technobyte.org)
12. Write a program using Linux timer to generate an alarm periodically
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void alarmHandler(int signum) {
printf("Alarm! Time to wake up!\n");
int main() {
signal(SIGALRM, alarmHandler);
alarm(2);
while (1) {
printf("Doing some work...\n");
sleep(1);
return 0;