getchar(); } } }
A、lock_set(fd, F_RDLCK) 选项> B、lock_set(fd, F_WRLCK) 选项> C、lock_set(fd, O_RDONLY) 选项> D、lock_set(fd, O_WRONLY) 选项>
<题目>下面的程序测试文件的读取锁。首先创建hello文件,之后对其上读取锁,最后释放读取锁。请选出应填写在空白处的选项。 int main(void) { int fd; fd=open(\ if(fd <0) { perror(\ exit(1); } _____A_____; getchar(); lock_set(fd, F_UNLCK); getchar(); close(fd); exit(0); }
void lock_set(int fd, int type) { struct flock lock; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len =0; while(1) { lock.l_type = type; if((fcntl(fd, F_SETLK, &lock)) == 0 ) { if( lock.l_type == F_RDLCK ) printf(\ else if( lock.l_type == F_WRLCK ) printf(\ else if( lock.l_type == F_UNLCK ) printf(\ return; } fcntl(fd, F_GETLK,&lock);
if(lock.l_type != F_UNLCK) { if( lock.l_type == F_RDLCK ) printf(\ else if( lock.l_type == F_WRLCK ) printf(\ getchar(); } } }
A、lock_set(fd, F_RDLCK) 选项> B、lock_set(fd, F_WRLCK) 选项> C、lock_set(fd, O_RDONLY) 选项> D、lock_set(fd, O_WRONLY) 选项>
<题目>下面的程序打开一个文件,写入字符串并读出。请选出应填写在空白处的选项。 int main() { FILE *stream; char s[3]={'a','b','c'}; stream=fopen(\ i=fwrite( ____D______ ); printf(\ fclose(stream); }
A、s,sizeof(char),nmemb,stream 选项> B、s,char,nmemb,fd 选项> C、s,sizeof(char),nmemb,FILE 选项> D、s,char,nmemb,FILE 选项> <题目>下面的程序获得当前进程的PID。请选出应填写在空白处的选项。 int main() { printf(\}
A、getpid() 选项> B、getppid() C、open(fd, pid) 选项> D、fopen(stream, pid) 选项> <题目>下面的程序判断fork函数返回值的情况。请选出应填写在空白处的选项。 int main(void) { pid_t result; ____A______; if(result == -1) { perror(\ exit; } else if(result == 0) { printf(\ }
else { printf(\ } }
A、result = fork() 选项> B、result = fork(-1) 选项> C、result = fork(0) 选项> D、result = fork(1) 选项>
<题目>下面的程序判断fork函数返回值的情况。请选出应填写在空白处的选项。 int main(void) { pid_t result; result = fork() ; if(result == -1) { perror(\ exit; } else if( _____D_____ ) { printf(\ } else { printf(\ } }
A、result < 0选项> B、result == 0 选项> C、result > 0 D、result !== 0 <题目>下面的程序使用文件名的方式来查找可执行文件,同时使用参数列表的方式。请选出应填写在空白处的选项。 int main() { if(fork()==0) { /*此处相当于调用“ps -ef”命令*/ if( _____C_____ (\ perror(\ } }
A、execl选项> B、execle选项> C、execlp 选项> D、execve 选项>
<题目>下面的程序使用使用完整的文件目录来查找对应的可执行文件,同时使用参数列表的方式。请选出应填写在空白处的选项。 int main() { if(fork()==0)
{ /*注意此处已给出ps命令所在的完整路径*/ if( ______A____ (\ perror(\ } }
A、execl选项> B、execle选项> C、execlp选项> D、execve 选项>
<题目>下面的程序将环境变量添加到新建的子进程中去,这里的“env”是查看当前进程环境变量的命令使用使用完整的文件目录来查找对应的可执行文件,同时使用参数列表的方式。请选出应填写在空白处的选项。 int main() { char *envp[]={\TH=/tmp\ if(fork()==0) { /*注意此处已给出env命令的完整路径*/ if( _____B_____ (\ perror(\ } }
A、execl选项> B、execle选项> C、execlp 选项> D、execve 选项>
<题目>下面的程序将环境变量添加到新建的子进程中去,这里的“env”是查看当前进程环境变量的命令使用使用完整的文件目录来查找对应的可执行文件。请选出应填写在空白处的选项。 int main() { /*命令参数列表,必须以NULL结尾*/ char *arg[]={\ char *envp[]={\ if(fork()==0) { if( ____D______ (\ perror(\ } }
A、execl选项> B、execle选项> C、execlp 选项> D、execve 选项>
<题目>下面的程序为服务器端应用程序,首先建立起socket,然后调用本地端口进行绑定,接着开始与客户端建立联系,并接收客户端发送的消息。请选出应填写在空白处的选项。 #define SERVPORT 3333 #define BACKLOG 10
#define MAX_CONNECTED_NO 10 #define MAXDATASIZE 5 int main() {
struct sockaddr_in server_sockaddr,client_sockaddr; int sin_size,recvbytes; int sockfd,client_fd;
char buf[MAXDATASIZE]; /*建立socket连接*/ if( _____A_____ ) { perror(\ exit(1); }
printf(\/*设置sockaddr_in 结构体中相关参数*/ server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(SERVPORT); server_sockaddr.sin_addr.s_addr=INADDR_ANY; bzero(&(server_sockaddr.sin_zero),8); /*绑定函数bind*/
if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))== -1) { perror(\ exit(1); }
printf(\/*调用listen函数*/
if(listen(sockfd,BACKLOG)== -1) { perror(\ exit(1); }
printf(\
/*调用accept函数,等待客户端的连接*/
if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))== -1) { perror(\ exit(1); }
/*调用recv函数接收客户端的请求*/
if((recvbytes=recv(client_fd,buf,MAXDATASIZE,0))== -1) { perror(\ exit(1); }
printf(\close(sockfd);